2

是否可以从 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()返回它的BookCopy实例数Bookissued_toNone

4

3 回答 3

2

这应该有效:

class Book(models.Model):
    ...
    def copied_available(self):
        return self.copies.filter(issued_to__isnull=True).count()
于 2013-10-17T18:40:27.323 回答
0

是的,只需limit_choices_to在 ForeignKey 中设置。从文档

“查找参数和值的字典(请参阅进行查询),限制此对象的可用管理员或 ModelForm 选择。将其与 Python datetime 模块中的函数一起使用,以按日期限制对象的选择。例如:”

limit_choices_to = {'pub_date__lte': datetime.date.today}
于 2013-10-17T18:37:48.293 回答
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>
于 2013-10-17T18:47:36.733 回答