假设我有如下的架构:
Book | Author
-------------
B1 | A1
B1 | A3
B1 | A2
B2 | A5
B2 | A4
B2 | A3
B3 | A5
B3 | A6
B3 | A1
B4 | A1
B4 | A5
B4 | A6
以下型号:
class Books(models.Model):
author = models.CharField(
max_length=100,
blank=False,
null=False,
db_index=True,
verbose_name=_('authors'),
)
book = models.CharField(
max_length=50,
blank=False,
null=False,
db_index=True,
verbose_name=_('book'),
)
book_type = models.CharField(
max_length=50,
blank=False,
null=False,
default="regular"
)
flavour = models.CharField(
max_length=10,
blank=False,
null=False,
verbose_name=_('flavour'),
)
cost = models.IntegerField()
status = models.CharField(
max_length=100,
null=True,
blank=True,
db_index=True,
)
我希望过滤掉所有那些作者不 A1(本例中 B2 )的书
这是使用group by
和not having
子句的简单SQL,我正在艰难的时间是使用django queryset和annotate完成它。大多数注释都围绕count
工作,我无法适应这种特殊情况。
任何指针都有帮助,谢谢! :)
答案 0 :(得分:1)
这应该做你想要的:
Books.objects.exclude(author='A1')
如果您想要一个明确的book
值列表,那么您可以这样做:
Books.objects.exclude(author='A1').values_list('book').distinct()
你的Books
模型对我来说有点奇怪。不确定您的具体用例是什么,但似乎Book
模型与ManyToMany
的{{1}}关系似乎更合适。