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

标签 python django django-models django-queryset

我有以下型号

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()

但我还需要了解每本书是否是该用户的最爱,然后将此查询集传递给模板。

谢谢。

最佳答案

这是对 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/

相关文章:

python - 检查 numpy 数组列表是否相等

python - 将二维动态指针数组作为参数传递给 cython 中的函数

javascript - Python/HTML 如何在没有 cookie Advisor 的情况下抓取网页内容?

django - haystack - 如何使用外键显示来自多个模型的数据?

django - 在保存内联表单集之前对其进行修改

javascript - 自定义选择标签功能

Django:从缓存本地过滤查询集

Python:更改列表类型以进行 json 解码

django Manytomany 通过

mysql - Django,当 99% 的列是默认值时,向表添加列的最佳实践是什么?