3

私のプロジェクトには典型的なモデルの継承があります:

class A(models.Model):
    boolean_field = models.BooleanField(default=True)

class B(A):
    some_other_field = models.CharField()

boolean_fieldクラス内のデフォルト値を上書きしたいのですがB、どうすればよいですか?

これはデータベースレイヤーで行うのが難しいかもしれないと思うので、少なくともDjango admin(つまりModelAdminクラスの形式B)でそのデフォルト値を単純にオーバーライドできます。

4

3 に答える 3

5

おっしゃるとおりB、django admin でモデルに使われているモデルフォームを変更するのが一番簡単な方法だと思います。

フォーム フィールドの初期値を変更するには、フィールドを再定義するか、__init__メソッドをオーバーライドします。

class BForm(forms.ModelForm):
    # either redefine the boolean field
    boolean_field = models.BooleanField(initial=False)

    class Meta:
        model = B

    # or override the __init__ method and set initial=False
    # this is a bit more complicated but less repetitive
    def __init__(self, *args, **kwargs):
        super(BForm, self).__init__(*args, **kwargs)
        self.fields['boolean_field'].initial = False

django admin でカスタム モデル フォームを使用するのは簡単です。

class BAdmin(admin.ModelAdmin):
    form = BForm

admin.site.register(B, BAdmin)
于 2012-06-21T19:25:20.150 に答える
1
class A(models.Model):
    boolean_field = models.BooleanField(default=True)
    def __unicode__(self):
        return self. boolean_field 


class B():
    some_other_field = models.CharField()
    default_fiel_from_bool = models.ForeignKey(A)
于 2012-06-21T18:59:13.560 に答える