-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