2017-04-04 21 views
-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)は、フォーム内の初期値として正しいプロジェクトを選択しません。

答えて

-1

initial=self.instance.related_fieldname.pkで設定できます。

+0

initial = self.instance.related_fieldnameは文字列です.pkはありません。関連するOtherModelのpkを参照することを意味しますか?すなわち、ウィジェットがChoiceFieldの値として使用するものです。 – Xeberdee

+0

これは 'OtherModel'のインスタンスでなければなりません、はい? – slurms

+0

OtherModelの選択肢は実際には他のモデルのpkですが、正しいpkを選択してintial = other_model.pkを選択しても、デフォルトでは何も選択されていません---------、私の編集を参照してください。 – Xeberdee

関連する問題