私のモデルの1つにデフォルト値のフィールドがありますが、管理者の中でそのデフォルト値を違えて欲しいです。ここではこれを達成するに私の試みです:Django管理者:インラインの初期値を無効にする
models.pyは
from django.db import models
class Parent(models.Model):
parent_field_1 = models.CharField(max_length=255)
parent_field_2 = models.CharField(max_length=255, blank=True)
class Meta:
ordering = ('pk',)
def __unicode__(self):
return self.parent_field_1
class Child(models.Model):
parent = models.ForeignKey(Parent)
child_field_1 = models.CharField(max_length=255)
child_field_2 = models.CharField(max_length=255, blank=True)
child_field_3 = models.IntegerField(default=0)
class Meta:
ordering = ('pk',)
verbose_name_plural = 'children'
def __unicode__(self):
return self.child_field_1
forms.py
from django import forms
from .models import Child
class ChildForm(forms.ModelForm):
class Meta:
model = Child
fields = [
'parent',
'child_field_1',
'child_field_2',
'child_field_3',
]
def __init__(self, *args, **kwargs):
if 'instance' not in kwargs:
initial = kwargs.get('initial', {})
initial['child_field_3'] = '1'
kwargs['initial'] = initial
super(ChildForm, self).__init__(*args, **kwargs)
admin.py
from django.contrib import admin
from .forms import ChildForm
from .models import Parent, Child
class ChildInline(admin.StackedInline):
model = Child
form = ChildForm
class ParentAdmin(admin.ModelAdmin):
inlines = [ChildInline]
class ChildAdmin(admin.ModelAdmin):
form = ChildForm
admin.site.register(Parent, ParentAdmin)
admin.site.register(Child, ChildAdmin)
私は子を追加して行きます、 「子フィールド3」フィールドには、モデルのデフォルトである「0」の代わりに「1」が設定されています。子を編集する場合は、「子フィールド3」フィールドにデータベース内の値が入力されます。これも必要なものです。
私が実行している問題は、親を追加または編集するときに発生します。親を追加しようとすると、すべての子インラインフォームにも記入する必要があります。同様に、親を編集しようとすると、余分な子インラインフォームをすべて記入する必要があります。 ChildInline
クラス 'form = ChildForm
行をコメントアウトすると、正しいの動作が得られますが、間違ったデフォルト値( "1"ではなく "0")が返されます。正しい動作と正しいデフォルト値を取得するにはどうすればよいですか?
私のコードではなく、 'self.fields ['child_field_3']。initial = '1''を使っても違いはありませんでした。あなたのデバッグコードを使用して、次の3回出力されました: '(['child_field_3']、True)' – Nick
私は問題を見つけました。 –
うわー、それだった!ありがとう!私の論理はオンラインのどこかからコピー/ペーストとして始まりました。どういうわけか私は初期値は常に文字列であると考えられていたが、明らかにそうではないという考えがある。再度、感謝します! – Nick