多对多关系中的复杂Django查询

多对多关系中的复杂Django查询

我有下列型号

class Book(models.Model):
    name        = models.CharField(max_length=140)

class UserProfile(models.Model):
    favorites    = models.ManyToManyField(Book, null=True, blank=True)
    user         = models.OneToOneField(User)

我需要把所有的书都列一张单子,告诉大家哪些是最喜欢的,哪些不是。
我需要一个能让我看到所有书
Book.objects.all()

但是我还需要知道每本书是否是该用户的最爱,然后将这个queryset传递给模板。
谢谢。

最佳答案

这是ManyToManyField相对简单的用法。

class Book(models.Model):
    name        = models.CharField(max_length=140)

class UserProfile(models.Model):
    favorites    = models.ManyToManyField(Book, null=True, blank=True)
    user         = models.OneToOneField(User)

favorite_books = this_user_profile.favorites.all()
for b in Book.objects.all():
    if b in favorite_books:
        print "Book", b.name, "is a favorite of this user!"
    else:
        print "Book", b.name, "is not a favorite of this user!"

ETA:既然你说你想把它添加到模板中,就把它作为元组列表给模板。
book_list = [(b, (b in favorite_books)) for b in Book.objects.all()]

在你的模板中,有代码
{% for book, is_favorite in book_list %}
    {% if is_favorite %}
        {% comment %} Do something with this favorite book {% endcomment %}
    {% else %}
        {% comment %} Do something with this non favorite book {% endcomment %}
    {% endif %}
{% endfor %}

关于python - 多对多关系中的复杂Django查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8781182/

10-09 13:58