过滤没有值的数据集
filter dataset not having a value
假设我有如下架构:
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)
这很简单 SQL 使用 group by
和 not having
子句,我遇到困难的是使用 django 查询集和注释来完成它。大多数注释都是围绕 count
工作的,我无法适应这种特殊情况。
任何指点都有帮助,谢谢! :)
这应该可以满足您的要求:
Books.objects.exclude(author='A1')
如果您想要一个不同的 book
值列表,那么您可以这样做:
Books.objects.exclude(author='A1').values_list('book').distinct()
不过我觉得您的 Books
模型有点奇怪。不确定您的具体用例是什么,但似乎与 Author
具有 ManyToMany
关系的 Book
模型可能更合适。
假设我有如下架构:
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)
这很简单 SQL 使用 group by
和 not having
子句,我遇到困难的是使用 django 查询集和注释来完成它。大多数注释都是围绕 count
工作的,我无法适应这种特殊情况。
任何指点都有帮助,谢谢! :)
这应该可以满足您的要求:
Books.objects.exclude(author='A1')
如果您想要一个不同的 book
值列表,那么您可以这样做:
Books.objects.exclude(author='A1').values_list('book').distinct()
不过我觉得您的 Books
模型有点奇怪。不确定您的具体用例是什么,但似乎与 Author
具有 ManyToMany
关系的 Book
模型可能更合适。