19

最初に保存するときに、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 []

見出しは無効になっていますが、編集のみが可能です。オブジェクト作成時に無効にしたい。つまり、最初に保存します。誰かがこれについて私を導くことができますか?

4

5 に答える 5

72

オーバーライドする必要はありませんget_readonly_fields。最も簡単な解決策は次のとおりです。

class ItemAdmin(admin.ModelAdmin):
    exclude=("headline ",)
    readonly_fields=('headline', )

デフォルトの実装は readonly_fields 変数を読み取るため、使用readonly_fieldsする場合はオーバーライドできません。get_readonly_fieldsそのため、どのフィールドを読み取り専用にするかを決定するロジックが必要な場合にのみオーバーライドします。

于 2015-02-02T15:58:42.933 に答える
10

作成中にフィールドを読み取り専用にしたい場合は、逆の方法で行う必要があります。

def get_readonly_fields(self, request, obj=None):
    if obj is None:
        return ['headline']
    return []
于 2015-02-02T10:28:24.740 に答える
-3

初期オブジェクトの保存中および編集中に無効にするために、これを行うことができます

class ItemAdmin(admin.ModelAdmin):
    def get_readonly_fields(self, request, obj=None):
        if obj is None:
            return ['headline']
        else:
            return ['headline']
        return []

それは私のために働いた。

于 2015-02-02T10:51:23.047 に答える