复杂模型:
Class Name(models.Model):
first_name = models.CharField(max_length=50,blank=True)
middle_name = models.CharField(max_length=50, blank=True)
last_name = models.CharField(max_length=50, blank=True)
class Person(models.Model):
names = models.ManyToManyField('Name')
wives = models.ManyToManyField('Person',related_name='husbands',null = True, blank = True)
表格:
class PersonForm(ModelForm):
names_list = forms.ModelMultipleChoiceField(queryset=Name.objects.filter(person=2), widget=forms.CheckboxSelectMultiple(attrs={"checked":""}))
wives_list = forms.ModelMultipleChoiceField(queryset=Person.objects.filter(husbands=2), widget=forms.CheckboxSelectMultiple(attrs={"checked":""}))
class Meta:
model = Person
fields = ('names','wives')
widgets = {
'names' : forms.HiddenInput(),
'wives': forms.HiddenInput(),
}
这是2号人员(人= 2,丈夫= 2)的硬编码。
它有效。但现在,我想将数字2更改为与当前编辑人员相关的变量。
如果我查看html源代码 - 我可以看到隐藏的字段:
<input id="id_names" name="names" type="hidden" value="[30, 63]" />
<input id="id_wives" name="wives" type="hidden" value="[42]" />
所以 - 有两种方式:
Name.objects.filter(person=somevariable)
- 显示人员姓名
或
Name.objects.fiter(id__in=othervariable)
- 显示名称变量
(和妻子一样)
但没有任何作用 - 特别是 - 我找不到合适的变量 - 我太近了......
答案 0 :(得分:0)
我发现了主要错误 - 我无法在类中设置id,因为它尚未设置。它在__init__
构造函数中设置。所以我必须把它改成:
class PersonForm(ModelForm):
def __init__(self, *args, **kwargs):
super(PersonForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.pk:
self.fields['names_list'].queryset=Name.objects.filter(person=instance.pk)
self.fields['wives_list'].queryset=Person.objects.filter(husbands=instance.pk)
names_list = forms.ModelMultipleChoiceField(queryset=Name.objects.none(), widget=forms.CheckboxSelectMultiple(attrs={"checked":""}))
wives_list = forms.ModelMultipleChoiceField(queryset=Person.objects.none(), widget=forms.CheckboxSelectMultiple(attrs={"checked":""}))
class Meta:
model = Person
fields = ('names','wives')
widgets = {
'names' : forms.HiddenInput(),
'wives': forms.HiddenInput(),
}
如果有人找到更好的解决方案 - 我将不胜感激。