при вводе электронного письма в строке поиска данные не загружаются, и пользователь не подвергается поиску, но выдается ошибка, что такой пользователь не найдет его. Это уже было перепроверено. Может, я что то не вижу? вся голова сломана, может кто-то имеет определенные выводы и видит то, чего я не вижу? заранее спасибо!
endpoints.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)
serializers.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()