使用 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_types
的 name
,因此:
User.objects.get(uuid=uuid<strong>, account_types__name='Mentor'</strong>)
或者如果您想要所有 User
个对象都是导师,您可以使用:
User.objects.filter(<strong>account_types__name='Mentor'</strong>)
我有 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_types
的 name
,因此:
User.objects.get(uuid=uuid<strong>, account_types__name='Mentor'</strong>)
或者如果您想要所有 User
个对象都是导师,您可以使用:
User.objects.filter(<strong>account_types__name='Mentor'</strong>)