Поиск не работает при вводе электронной почты - PullRequest
0 голосов
/ 27 февраля 2020

при вводе электронного письма в строке поиска данные не загружаются, и пользователь не подвергается поиску, но выдается ошибка, что такой пользователь не найдет его. Это уже было перепроверено. Может, я что то не вижу? вся голова сломана, может кто-то имеет определенные выводы и видит то, чего я не вижу? заранее спасибо!

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()

1 Ответ

0 голосов
/ 27 февраля 2020

проблема решена с помощью контейнера

 @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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...