-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)不会选择正确的项目作为表单中的初始值。
initial = self.instance.related_fieldname是一个字符串 - 它没有pk。你的意思是查找相关OtherModel的pk吗?即。这是小部件用作ChoiceField的值的东西。 – Xeberdee
它应该是'OtherModel'的一个实例,是吗? – slurms
其他模型的选择确实是其他模型的pk - 但即使我选择了正确的pk并选择intial = other_model.pk - 它仍默认为没有选中的任何东西---------,请参阅我的编辑。 – Xeberdee