0

假设我有如下架构:

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这是使用和子句的简单 SQL not having,我遇到的困难是使用 django 查询集和注释来完成它。count大多数我无法适应这种特殊情况的注释工作。

任何指针都有帮助,谢谢!:)

4

1 回答 1

1

这应该做你想要的:

Books.objects.exclude(author='A1')

如果你想要一个不同的book值列表,那么你可以这样做:

Books.objects.exclude(author='A1').values_list('book').distinct()

不过,你的Books模型对我来说有点奇怪。不确定您的具体用例是什么,但似乎与an 有关系的Book模型可能更合适。ManyToManyAuthor

于 2017-10-20T06:09:09.243 回答