Django - 在models.py中过滤QuerySet

时间:2013-10-17 18:28:54

标签: python django

是否可以从django模型进行查询?

我有2个型号:

class Book(models.Model):
    ...
    def copies_available(self):
        pass

class BookCopy(models.Model):
    ...
    book_category = models.ForeignKey(Book, related_name='copies')
    issued_to = models.ForeignKey(EndUser, related_name='issued_books', null=True, blank=True)

我希望copies_available()返回BookCopyBook

issued_to None个人的数量

3 个答案:

答案 0 :(得分:2)

这应该有效:

class Book(models.Model):
    ...
    def copied_available(self):
        return self.copies.filter(issued_to__isnull=True).count()

答案 1 :(得分:0)

是的,只需在ForeignKey中设置limit_choices_to即可。来自docs

“限制此对象的可用admin或ModelForm选项的查找参数和值的字典(请参阅创建查询)。使用Python datetime模块中的函数来限制按日期选择对象。例如:”< / p>

limit_choices_to = {'pub_date__lte': datetime.date.today}

答案 2 :(得分:0)

我几年前做过这个,所以它可能有所改变:

您需要创建一个BookManager类,并将功能放在那里。然后将管理器分配给Book模型的对象变量,如下所示:

class BookManager(models.Manager):

    def copied_available(self):

        queryset = BookCopy.objects.filter(book_category=self.id).filter(issued_to is not None)

        return queryset.count()

class Book(models.Model):
    ...
    objects = BookManager()

因此,在您的模板中,您可以执行以下操作:

<p> Copies: {{ thebook.copied_available }}</p>