Набор данных фильтра, не имеющий значения

Предположим, у меня есть схема, как показано ниже:

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,
    )

и я хочу отфильтровать все те книги, автор которых не А1 (В2 в данном случае)

Это простой SQL с помощью group by а также not having Положение, что у меня трудное время, это делается с помощью набора запросов django и аннотации. Большая часть аннотации работает count что я не в состоянии вписаться в этот конкретный случай.

любые указатели полезны, спасибо!:)

1 ответ

Решение

Это должно делать то, что вы хотите:

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

Если вы хотите отдельный список book Значения, то вы можете сделать:

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

Ваш Books модель выглядит немного странно для меня, хотя. Не уверен, каков ваш конкретный вариант использования, но кажется, что Book модель с ManyToMany отношение к Author может быть более подходящим.

Другие вопросы по тегам