Лучший способ поиска с помощью множества полей Django

#python #django #django-rest-framework

Вопрос:

У меня есть 2 модели, и я хотел бы выполнить поиск с помощью поля «Много ко многим» в соответствии с моей структурой, ниже приведены мои модели :

 class User(django_models.AbstractBaseUser, TimeStampedModel,
           django_models.PermissionsMixin):
    """
    User model for the user creation
    """
    uuid = models.UUIDField(unique=True, max_length=500,
                            default=uuid.uuid4,
                            editable=False,
                            db_index=True, blank=False, null=False)
   
    account_types = models.ManyToManyField(AccountTypes,
                                           related_name='account_types')
 

Затем другая модель AccountTypes :

 class AccountTypes(TimeStampedModel, models.Model):
    """
    Account types for the users. e.g Mentors, Mentees, Parents etc.
    """
    uuid = models.UUIDField(unique=True, max_length=500,
                            default=uuid.uuid4,
                            editable=False,
                            db_index=True, blank=False, null=False)
    name = models.CharField(_('Account Name'), max_length=30, blank=False,
                            null=False)
 

Как я могу выполнить поиск uuid пользователя с помощью определенного AccountType ?

Моя попытка была такой :

 User.objects.get(uuid=uuid, account_types__in=['Mentor'])
 

Но я получил эту ошибку :

 ValueError: Field 'id' expected a number but got 'Mentor'.
 

Ответ №1:

Вы должны фильтровать по name тому account_types , так:

 User.objects.get(uuid=uuid, account_types__name='Mentor') 

или, если вы хотите, чтобы все User объекты были наставниками, вы можете работать с:

 User.objects.filter(account_types__name='Mentor')