Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 搜索不';当你输入电子邮件时,它不会工作_Python_Django - Fatal编程技术网

Python 搜索不';当你输入电子邮件时,它不会工作

Python 搜索不';当你输入电子邮件时,它不会工作,python,django,Python,Django,当您在搜索栏中输入电子邮件时,不会加载数据,也不会搜索用户,但会抛出一个错误,该用户将无法找到它。已经重新检查过了。我能不能让那个人看不见?所有人都头破血流,也许有人有了一定的结论,看到了我没有看到的?提前谢谢 端点.py class UsersSearchEndpoint(AbsLoginRequiredAPIView): serializer_class = SearchSerializer def post(self, request, **kwargs): s

当您在搜索栏中输入电子邮件时,不会加载数据,也不会搜索用户,但会抛出一个错误,该用户将无法找到它。已经重新检查过了。我能不能让那个人看不见?所有人都头破血流,也许有人有了一定的结论,看到了我没有看到的?提前谢谢

端点.py

class   UsersSearchEndpoint(AbsLoginRequiredAPIView):

     serializer_class = SearchSerializer

 def post(self, request, **kwargs):
    serializer = self.serializer_class(data=request.data)
    serializer.is_valid(raise_exception=True)

    search_text = serializer.validated_data.get('search_text')
    user_profiles = self._get_user_profiles_by_unp(search_text,
                                                   self.request.user.pk) if serializer.validated_data.get('as_unp') \
        else self._get_user_profiles_by_company_name(search_text, self.request.user.pk)
    if user_profiles.count() > 5:
        user_profiles = user_profiles[:5]
    return Response(UserProfileSerializer(user_profiles, many=True).data)

@staticmethod
def _get_user_profiles_by_unp(search_text, self_pk):
    return UserProfile.objects.filter(Q(unp__icontains=search_text)).exclude(user__pk=self_pk)

@staticmethod
def _get_user_profiles_by_company_name(search_text, self_pk):
    return UserProfile.objects.filter(Q(company_name__icontains=search_text) | Q(user__email=search_text)).exclude(
        user__pk=self_pk)
序列化程序.py

class SearchSerializer(serializers.Serializer):
     search_text = serializers.CharField(required=False, allow_blank=True)
     as_unp = serializers.BooleanField(required=False) 


class UserSerializer(serializers.ModelSerializer):
  class Meta:
    model = User
    fields = ('email',)

class UserProfileSerializer(serializers.ModelSerializer):
   user = UserSerializer()

class Meta:
    model = UserProfile
    fields = ('company_name', 'unp', 'user', 'is_primary_contract', 'get_full_fio')
models.py

class User(AbstractUser):
USER_ROLES = [('Users'), ('support')]
email = models.EmailField(unique=True, null=True)
user_role = models.CharField(max_length=20, choices=USER_ROLES,
                             verbose_name='user role',
                             default=USER_ROLES[0][0])
date_created = models.DateTimeField(auto_now_add=True,
                                    verbose_name='date the record was created',
                                    null=True)
date_updated = models.DateTimeField(auto_now=True,
                                    verbose_name='the time a record was updated',
                                    null=True)
invite_counter = models.PositiveSmallIntegerField(default=0)
is_can_send_zip = models.BooleanField(default=False,
                                      verbose_name='send archive')
documents_on_page = models.PositiveIntegerField(default=10)
is_agree_license = models.BooleanField(default=False)

def __str__(self):
    return f'{self.get_user_role_display()} {self.email}'

class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='user_profile',
                            verbose_name='User',
                            on_delete=models.CASCADE, blank=True,
                            null=True)
company_name = models.CharField(max_length=255,
                                verbose_name='company name',
                                null=True, blank=True)
unp = models.CharField(max_length=30, verbose_name='UNP',
                       null=True, blank=True)
last_name = models.CharField(max_length=50, verbose_name='last name',
                             null=True, blank=True)
first_name = models.CharField(max_length=50, verbose_name='first name',
                              null=True, blank=True)
middle_name = models.CharField(max_length=50, verbose_name='middle name',
                               null=True, blank=True)
day_of_birthday = models.DateField(null=True, blank=True,
                                   verbose_name='day of birthday')
country = models.CharField(max_length=50, null=True, blank=True,
code_of_issuing_state = models.CharField(max_length=10,
                                         verbose_name='code country',
                                         null=True, blank=True)
sex = models.CharField(max_length=1, choices=[('M'), ('F')],
                       verbose_name='Пол', null=True, blank=True)
full_data = JSONField(default=dict, blank=True, null=True)
serial_number = models.TextField(verbose_name='serial number', blank=True,
                                 null=True)
date_created = models.DateTimeField(auto_now_add=True,
                                    verbose_name='date create',
                                    null=True)
date_updated = models.DateTimeField(auto_now=True,
                                    verbose_name='date update',
                                    null=True)

is_primary_contract = models.BooleanField(default=False,
                                          verbose_name='primary contract')

def get_owner_name(self):
    if self.company_name:
        return self.company_name
    have_all_parts_of_names = all((self.first_name, self.middle_name,
                                   self.last_name))
    if have_all_parts_of_names:
        return f'{self.last_name} {self.first_name[0]}.' \
               f' {self.middle_name[0]}.'
    else:
        result = ''
        if self.first_name:
            result = self.first_name
        if self.middle_name:
            result += f' {self.middle_name}'
        if self.last_name:
            result += f' {self.last_name}'
    if have_all_parts_of_names:
        return result
    return f'{self.user.username}'

def get_owner_name_start_fio(self):
    have_all_parts_of_names = all((self.first_name, self.middle_name,
                                   self.last_name))
    if have_all_parts_of_names:
        return f'{self.last_name} {self.first_name[0]}.' \
               f' {self.middle_name[0]}.'
    else:
        result = ''
        if self.first_name:
            result = self.first_name
        if self.middle_name:
            result += f' {self.middle_name}'
        if self.last_name:
            result += f' {self.last_name}'
    if result:
        return result
    elif self.company_name:
        return self.company_name
    else:
        return f'{self.user.username}'

def get_full_fio(self):
    result = ''
    if self.last_name:
        result += f'{self.last_name}'

    if self.first_name:
        result += f' {self.first_name}'

    if self.middle_name:
        result += f' {self.middle_name}'

    return result

def get_full_owner_name_start_fio(self):
    fio = self.get_full_fio()
    if fio:
        return fio
    elif self.company_name:
        return self.company_name
    else:
        return f'{self.user.username}'

def get_owner_name_with_email(self):
    return f'{self.get_owner_name()} [{self.user.email}]'

def get_owner_name_start_fio_with_email(self):
    return f'{self.get_owner_name_start_fio()} [{self.user.email}]'

def __str__(self):
    return self.get_owner_name()

这个问题是用不包含项解决的

 @staticmethod
def _get_user_profiles_by_company_name(search_text, self_pk):
    return UserProfile.objects.filter(Q(company_name__icontains=search_text) | Q(user__email__icontains=search_text)).exclude(
        user__pk=self_pk)

那么,您可以发布您的模型吗?为什么不使用DRF?您是否尝试过更改:search_text=request.data.get('search_text')或search_text=serializer.data.get('search_text')?