覆盖django form的clean方法来更改ModelChoiceField查询集

时间:2011-05-02 14:36:21

标签: django-forms override

我有这个型号:

class PetAttribute(models.Model):
    species = models.ForeignKey(PetSpecies, related_name = "pets")
    pet_category = models.ForeignKey(PetCategory, related_name = "pets", blank=True, null=True)
    pet_type = models.ForeignKey(PetType, related_name = "pets", blank=True, null=True)
    additional_fields= models.ManyToManyField( AdditionalField, null= True, blank=True )

现在我想在select(pet_category,pet_type)中添加一个附加选项,这是

  

( “0”, “其他”)

在这些查询集中。我试过但表格给我一个错误

  

错误:选择有效选项。这个选择不是可用的选择之一。

here是它的一个解决方案,但我想通过 ModelChoiceField

来做到这一点

有什么建议吗?

谢谢:)

1 个答案:

答案 0 :(得分:1)

虽然有可能,但您确定这是您想要做的吗?您正在告诉一个字段,该字段验证模型对象的选择以接受无效的答案。

创建“其他”PetType和PetCategory对象或使用empty_label作为“other”可能比强制ModelChoiceField接受任意值更有意义。

然后查找选中“其他”的对象,查询“无”,

pattrs_w_other_pet_type = PetAttribute.object.filter(pet_type=None)