在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了。