Группируйте по или различайте, чтобы django удалил строку, в которой есть дублирующийся столбец
У меня есть таблица, как показано ниже
Таблица A
ID name score
1 aaa 100
2 bbb 200
3 ccc 300
4 bbb 100
5 kkk 600
6 ccc 300
Теперь имена bbb
и ccc
дублируются, поэтому я хочу удалить их и изобразить следующим образом,
ID name score
1 aaa 100
2 bbb 200
3 ccc 300
5 kkk 600
Я обнаружил, что модель django не имеет groupby, поэтому, я полагаю, нужно использовать annotate
или distinct
Так что моя идея заключается в следующем,
MyModel.objects.annotate(Count('name'))
Однако это не работает так, как я надеюсь.
Любая помощь или подсказка?
Различные результаты, основанные на поле, не являются тривиальными для базы данных, отличной от postgresql в Django на момент написания статьи.
Но мы можем сделать это с помощью Exists
подзапроса:
from django.db.models import Exists, OuterRef
MyModel.objects.filter(
~Exists(
MyModel.objects.filter(pk__lt=OuterRef('pk'), name=OuterRef('name'))
)
)
Таким образом, мы генерируем в результате только объект MyModel
, если не существует другого MyModel
с таким же именем и меньшим первичным ключом.