Как запросить модель Django по общим значениям - PullRequest
0 голосов
/ 23 октября 2019

У меня есть модель django для учетных записей пользователей, с внешним ключом для пользователя и полем выбора для типа учетной записи. Это выглядит примерно так:

class Account(models.Model):
    user = models.ForeignKey(User)
    account_type = ChoiceField(models.TextField(
        choices=zip(ACCOUNT_TYPES, ACCOUNT_TYPES)
    )

Теперь я хочу добавить уникальность в модель, чтобы у каждого пользователя была только одна учетная запись каждого типа, поэтому я добавил в метаданные unique_together с пользователем и учетной записью. тип.

К сожалению, эта модель довольно старая и уже имеет огромную таблицу, поэтому мне нужно найти дублированные объекты (дублированные в том, что существует более одного объекта с одной и той же комбинацией user-account_type), поэтому я могу что-то сделать сих.

Мой вопрос - как я могу запросить таблицу Account, чтобы найти все дублированные экземпляры? Я хочу что-то вроде

«Дайте мне все объекты, в которых тип пользователя и учетной записи совпадает с типом пользователя и учетной записи любого другого объекта».

1 Ответ

1 голос
/ 23 октября 2019

Вы можете использовать annotate и Count, что-то вроде:

from django.db.models import Count, Max

Account.objects.values('user', 'account_type')
    .order_by()
    .annotate(max_id=Max('id'), count_id=Count('id'))
    .filter(count_id__gt=1)

Боюсь, я не могу проверить это прямо сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...