在django开发中,我遇到过这样一个需求:
我有两个类A和B,A是B的外键。A和B代码如下,可以据此看出A与B的关系。
class A(models.Model):
name = models.CharField(u"名称", max_length=20, unique=True)
state = models.CharField(u"状态", max_length=20)
class B(models.Model):
name = models.CharField(u"名称", max_length=20, unique=True)
a = models.ForeignKey(A,verbose_name=u"外键A")
在添加B的时候,需要选择一个A的Instance作为外键。但是不是所有A的Instance都可以,只有状态(state)是“就绪”的A才可以备选。这个问题总结一下,可以称为“django外键数据集过滤”问题。
调研发现,django已经提供了解决这个问题的API。具体实现就是在获得表单form后,过滤特定属性的数据集。代码如下:
form = B_Add_Form()
form.fields['a'].queryset = A.objects.filter(state="就绪")
这样,在添加B时,备选的A就只有状态为“就绪”的A了。
转载于:https://blog.51cto.com/speakingbaicai/1051706