Django - 更好地评估模型层面的关系

时间:2010-05-18 15:58:41

标签: django django-models

这是一对简单的关系型模型。

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”方法?

我不是双重数据库命中的粉丝,但我想在模型级别这样做。

2 个答案:

答案 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)

这将为您提供至少包含一本书的所有书架列表。