使用 ManyToMany 字段 Django 进行搜索的最佳方法

Best way to search with a ManyToMany field Django

我有 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)

如何搜索具有特定 AccountType 的用户 uuid?

我的尝试是这样的:

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

但是我得到了这个错误:

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

您应该过滤 account_typesname,因此:

User.objects.get(uuid=uuid<strong>, account_types__name='Mentor'</strong>)

或者如果您想要所有 User 个对象都是导师,您可以使用:

User.objects.filter(<strong>account_types__name='Mentor'</strong>)