Группируйте по или различайте, чтобы 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'))

Однако это не работает так, как я надеюсь.

Любая помощь или подсказка?

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

Вернуться на верх