Django ORM - 通过模型查询多对多?

时间:2014-04-13 05:53:48

标签: python sql django

所以我试图在Django中实现用户收藏夹系统。我需要存储一个Gallery对象被收藏的时间,所以我使用的是Django的many to many through模式。正如您在下面所看到的,我有一个Gallery对象,它与已经收藏它的用户有很多关系,而Favorite对象与User和Gallery有多对一关系。我想做一些事情,比如显示包含所有用户收藏夹的页面,查询用户收藏夹以查看某个画廊是否在其中,等等。所以基本上能够让画廊成为某个用户有利。使用ORM最简单的方法是什么,或者这是我需要编写原始SQL的东西?

class Gallery(models.Model):
    favoriters = models.ManyToManyField(
    User, through='Favorite', null=True, related_name="favoriters")

    def __unicode__(self):
        return self.name        

class Favorite(models.Model):
    user = models.ForeignKey(User)
    gallery = models.ForeignKey(Gallery)
    date = models.DateField(auto_now_add=True)

感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用Django ORM轻松完成此操作。

显示包含所有用户收藏夹的页面

user.favoriters.all()  # though that is not a good related_name

查询用户的收藏夹以查看某个图库是否在其中

if user.favoriters.filter(pk=my_gallery.pk).exists():
    pass

有关更多示例,请参阅the documentation