Набор данных фильтра, не имеющий значения
Предположим, у меня есть схема, как показано ниже:
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
может быть более подходящим.