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