4

「lock_slug」のような他のフィールド値に応じて、slug フィールドを read_only にしたい。

2つの条件があります。

1) "lock_slug" の値が false の場合、slug フィールドはフィールド "title" から直接事前入力されます。

prepopulated_fields = {"slug": ("title",),}

2) "lock_slug" の値が true の場合、slug フィールドは読み取り専用になります。

def get_readonly_fields(self, request, obj = None):
    if obj and obj.lock_slug == True:
        return ('slug',) + self.readonly_fields        
    return self.readonly_fields

これら 2 つは独立しては問題なく動作しますが、両方を使用すると問題が発生します。

編集時に get_readonly_fields() を追加しようとすると、prepopulated_fields が原因でエラーが発生します。これら 2 つのクラッシュは互いに発生します。

管理者側で両方を機能させるための解決策があります。

以下のリンクも参照します

別のフィールドの値に基づいて、Django Admin でフィールドを読み取り専用にする

django管理者は、objを変更するときにフィールドを読み取り専用にしますが、新しいobjを追加するときに必要です

しかし、これら2つを同時に機能させることはできません。

ありがとう、

ミーナクシ

4

3 に答える 3

7

別の方法は次のとおりです。

class PostAdmin(admin.ModelAdmin):
    list_display = (
        'title',
        'slug',
    )
    prepopulated_fields = {'slug': ('title',)}

    def get_readonly_fields(self, request, obj=None):
        if obj:
            self.prepopulated_fields = {}
            return self.readonly_fields + ('slug',)
        return self.readonly_fields
于 2014-01-10T13:08:23.643 に答える
0

prepoluted フィールドを read_only にすることはできません。したがって、事前入力されていない新しいフィールドを作成し、そのフィールドでアクションを実行すると、問題が解決します。

于 2013-02-12T07:02:37.437 に答える