django过滤器中的变量是什么

时间:2015-09-17 23:31:37

标签: django django-views

复杂模型:

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) - 显示名称变量

中的值

(和妻子一样)

但没有任何作用 - 特别是 - 我找不到合适的变量 - 我太近了......

1 个答案:

答案 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(),
        }

如果有人找到更好的解决方案 - 我将不胜感激。