2017-04-04 87 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'] 

这为创建一个下拉组的项目,如果没有设置值工作正常,但是当它被设置为某个项目名称值 - 初始参数(Project.pk)不会选择正确的项目作为表单中的初始值。

回答

-1

您可以通过设置initial=self.instance.related_fieldname.pk来完成。

+0

initial = self.instance.related_fieldname是一个字符串 - 它没有pk。你的意思是查找相关OtherModel的pk吗?即。这是小部件用作ChoiceField的值的东西。 – Xeberdee

+0

它应该是'OtherModel'的一个实例,是吗? – slurms

+0

其他模型的选择确实是其他模型的pk - 但即使我选择了正确的pk并选择intial = other_model.pk - 它仍默认为没有选中的任何东西---------,请参阅我的编辑。 – Xeberdee