我有以下型号
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()
但我还需要知道每本书是否是该用户的最爱,然后将此查询集传递给模板。
感谢。
答案 0 :(得分:2)
这是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 %}