【发布时间】:2015-04-09 21:28:14
【问题描述】:
我有一个模型 Book 有一个外键来模型 Publisher。
class Publisher(models.Model):
...
class Book(models.Model):
publisher = models.ForeignKey(Publisher)
...
在一个单独的应用程序中,我有一个模型 Task,它可以具有任何其他模型的通用外键。
class Task(models.Model):
content_type = models.ForeignKey(ContentType)
object_pk = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_pk')
complete = models.BooleanField(default=False)
...
我希望能够向Publisher 模型添加一个方法,该模型返回与其关联的所有任务或任何出版商的书籍。我可以分开做:
class Publisher(models.Model):
...
def get_tasks(self):
return Task.objects.filter(content_type=ContentType.objects.get_for_model(self), object_pk=self.pk)
def get_book_tasks(self):
return Task.objects.filter(content_type=ContentType.objects.get_for_model(Book), object_pk__in=self.related_books.values_list('pk', flat=True))
但我希望能够将这两者组合成一个返回单个查询集的方法,从而允许我通过任务属性进一步过滤它(例如允许我执行 Publisher.objects.first().get_all_tasks().filter(complete=False) 的 get_all_tasks() 方法。 )
【问题讨论】:
标签: python django django-queryset