这是一对简单的关系型模型。
class Shelf(models.Model):
name = models.CharField(max_length=100)
def has_books(self):
if Book.objects.filter(shelf=self):
return True
else:
return False
class Book(models.Model):
shelf = models.ForeignKey(Shelf)
name = models.CharField(max_length=100)
是否有更好(或替代)的方式来编写“has_book”方法?
我不是双重数据库命中的粉丝,但我想在模型级别这样做。
答案 0 :(得分:3)
你可以这样做:
def has_books(self):
return self.book_set.all().count() > 0
答案 1 :(得分:1)
我不确定你对Hassan编写它的方式有什么异议,但也许 - 根据你的'双数据库命中'评论 - 你正在寻找一种方法一次检查所有的Shelf实例?如果是这样,您可以使用注释来执行此操作:
from django.db.models import Count
Book.objects.all().annotate(num_books=Count('book')).filter(num_books__gt=0)
这将为您提供至少包含一本书的所有书架列表。