如何在django admin中以一对一的关系过滤占用的模型

时间:2014-01-09 09:19:31

标签: python django

假设我在DB中有两个带有相应表格的模型。

一个模特是男人,另一个模特是女人。让我们说我不想塑造男女之间的婚姻关系。比方说,一个男人可以娶一个女人,反之亦然。 因此,我们在模型之间建立了一对一的关系。

我知道怎么做,我不知道如何根据django管理表格字段过滤被占用的男女。

1 个答案:

答案 0 :(得分:1)

在您的表单中,您可以修改/过滤传递给选择男/女的ModelChoiceField的查询集,并执行queryset = Woman.objects.filter(man=None)或其他任何操作以获取当前未婚男性。

顺便说一句,除非你专门为教会或某些国家工作,否则你可能想修改你的方法,因为你现在不能解释同性恋婚姻(或阿米什人就此而言)。此外,让ManWoman模型具有不必要的非规范化,除非您将其分成两个模型的具体原因,否则只需拥有Person模型就可以获得更好的服务具有gender属性。

编辑:要扩展您的评论,如果我们按照您的建议设置模型 -

class Woman(models.Model):
    age = models.IntegerField()
    ...

class Man(models.Model):
    age = models.IntegerField()
    woman = models.OneToOneField(Woman)
    ...

然后您可以访问man.woman或woman.man并且查询集可以以任何方式工作。当您使用OneToOneField

时,Django会为您处理这些内容