反转模型视图的外键集

时间:2011-05-24 10:31:17

标签: django orm

使用以下型号设置:

class Cat(models.Model):
    claw = models.CharField(max_length=20)
    name = models.CharField(max_length=20)

class Fur(models.Model):
    type = models.CharField(max_length=20)
    cat = models.ForeignKey(Cat)

    class Meta:
        db_table=u'cat_view'
        managed=False

example

Fur拥有Cat的外键。 CatView是Cat的子集视图,可以手动管理。有没有办法在这个设置中使用django有用的反向集方法?

另外,我可以使用Fur.objects.filter(cat_id = cat_view.id,...),它与cat_view.fur_set.filter(...)具有相同的功能,但我无法进行反向查找例如CatView.objects.filter(fur__type =“shaggy”)。

编辑: 添加了示例模型文件,为了清晰起见更改了图像,增加了较小的复杂性。

1 个答案:

答案 0 :(得分:1)

首先,您提供的ORM调用都不起作用:fur_setcat实例的属性,而不是Cat.objects经理的属性。

其次,Django对所有的数据库视图没有特定的支持,所以你在视图中使用这一特定功能的问题有点奇怪。您可以将CatView定义为单独的(非托管)模型,尽管您需要注意更新和保存。然后,通过直接查询Fur对象,可以获得与反向关系相同的效果:

Fur.objects.filter(cat=my_cat_view.id)