代码之家  ›  专栏  ›  技术社区  ›  Lutaaya Huzaifah Idris

使用多字段Django进行搜索的最佳方式

  •  1
  • Lutaaya Huzaifah Idris  · 技术社区  · 4 年前

    我有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 回复  |  直到 4 年前
        1
  •  1
  •   willeM_ Van Onsem    4 年前

    你应该在屏幕上进行过滤 name account_types ,因此:

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

    或者如果你想要全部 User 作为导师的对象,您可以使用:

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