Django adminのモデルからいくつかのフィールドを無効にして、最初の保存時に管理したい。
"<input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input">"
このような。
私のモデルは:
class Blogmodel(models.Model):
tag = models.ForeignKey(Tag)
headline = models.CharField(max_length=255)
image=models.ImageField(upload_to=get_photo_storage_path, null=True, blank=False)
body_text = models.TextField()
pub_date = models.DateField()
authors = models.ForeignKey(Author)
n_comments = models.IntegerField()
「見出し」と「n_comments」を無効にしたい。私はそれをadmin.pyファイルで試しましたが、それは最初の保存でフィールドを無効にしません。ただし、フィールドを編集すると、フィールドが読み取り専用になります。
admin.py
class ItemAdmin(admin.ModelAdmin):
exclude=("headline ",)
def get_readonly_fields(self, request, obj=None):
if obj:
return ['headline']
else:
return []
ヘッドリングは無効になりますが、編集のみです。オブジェクト作成時に無効にしたい。つまり、最初に保存します。誰かがこれを案内してくれますか?
作成中にフィールドを読み取り専用にする場合は、逆の方法で行う必要があります。
def get_readonly_fields(self, request, obj=None):
if obj is None:
return ['headline']
return []
get_readonly_fields
をオーバーライドする必要はありません。最も簡単な解決策は次のとおりです。
class ItemAdmin(admin.ModelAdmin):
exclude=("headline ",)
readonly_fields=('headline', )
readonly_fields
を使用する場合、デフォルトの実装はreadonly_fields変数を読み取るため、get_readonly_fields
をオーバーライドすることはできません。そのため、どのフィールドを読み取り専用にするかを決定するロジックが必要な場合にのみ、オーバーライドします。
初期オブジェクトの保存中に無効にするため、および編集のためにこれを行うことができます
class ItemAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
if obj is None:
return ['headline']
else:
return ['headline']
return []
それは私のために働いた。