-1
私は、現在作業中のプロジェクトを部門に登録しようとするフォームを持っています。Djangoフォーム:初期値を設定
models.py
class Department(models.Model):
dept_name = models.CharField(max_length=25)
address = models.CharField(max_length=50)
class Project(models.Model):
projectname = models.CharField(max_length=25)
department = models.ForeignKey(Department, null=True, blank=True, on_delete=models.SET_NULL)
forms.py
class ProjectChoiceField(ModelChoiceField): # return a list of projects for the department form.
def label_from_instance(self, obj):
return "%s" % obj.projectname
class SetDepartmentProjectForm(ModelForm):
def __init__(self, *args, **kwargs):
super(SetDepartmentProjectForm, self).__init__(*args, **kwargs)
if not self.fields['projectstring']: # no default set
self.fields['projectstring'] = ProjectChoiceField(Project.objects.filter(department=self.instance), required=False)
else:
project = Project.objects.get(projectname=self.fields['projectstring'])
self.fields['projectstring'] = ProjectChoiceField(Project.objects.filter(department=self.instance), required=False, initial=project.pk)
class Meta:
model = Department
fields = ['dept_name', 'address', 'projectstring']
これは値が設定されていない場合は、プロジェクトのドロップダウンセットを作成するために[OK]を動作しますが、それはいくつかのプロジェクト名の値に設定されている場合 - 最初のarg(Project.pk)は、フォーム内の初期値として正しいプロジェクトを選択しません。
initial = self.instance.related_fieldnameは文字列です.pkはありません。関連するOtherModelのpkを参照することを意味しますか?すなわち、ウィジェットがChoiceFieldの値として使用するものです。 – Xeberdee
これは 'OtherModel'のインスタンスでなければなりません、はい? – slurms
OtherModelの選択肢は実際には他のモデルのpkですが、正しいpkを選択してintial = other_model.pkを選択しても、デフォルトでは何も選択されていません---------、私の編集を参照してください。 – Xeberdee