【问题标题】:Django ManytoMany and throughDjango 多对多并通过
【发布时间】:2013-10-07 20:00:26
【问题描述】:

我有以下型号:

class Book(models.Model):    
    ASIN = models.CharField(max_length=255, primary_key=True)
    title = models.CharField(max_length=255)
    users = models.ManyToManyField(FacebookCustomUser, through='BookRatings')

class BookRatings(models.Model):
    user = models.ForeignKey(FacebookCustomUser)
    book = models.ForeignKey(Book)
    rating = models.IntegerField()

现在我想获取登录用户的所有书籍和评分。我尝试了以下方法:

books = request.user.book_set.all()

但现在书籍中没有评级字段。我做错了什么?

【问题讨论】:

    标签: django django-models django-database


    【解决方案1】:

    book_set 为您提供 Book 记录,而不是 BookRating 记录。您可以通过标准的反向关系获得:

    request.user.bookratings_set.all()
    

    这将包含评级字段,加上 book ForeignKey 以获得图书。

    【讨论】:

    • 好的。谢谢。如何组合这两个数据集?我想要一个有书+评级的记录。就像在连接语句中一样。
    • Django 不这样做,因为那样你会破坏对象映射。但是没有必要:您可以使用select_related('book') 自动获取关联的书籍,但关键是要坚持对象:您有一个 BookRating,book 字段使您可以访问Book 对象。
    • 这正是我想要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2015-02-15
    • 2016-01-29
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多