Как я могу использовать django ModelForm объект и Queryset для выполнения функции аутентификации входа - PullRequest
1 голос
/ 26 апреля 2020

Мой следующий вопрос о том, как я могу разработать функцию, с помощью которой я могу сравнивать данные запроса POST (ModelForm) и существующие данные модели в queryset.

Это mi models.py:

class Employee(models.Model):
    dni = models.CharField(max_length=9, null=False, blank=False, default="12345678R")
    name = models.CharField(max_length=7)
    surname = models.CharField(max_length=8)
    email = models.CharField(max_length=20)
    telefone_number = models.IntegerField()
    user_nick = models.CharField(max_length=10, null=False, blank=False, default="user")
    password = models.CharField(max_length=20, null=False, blank=False, default="password")
    ticket = models.ManyToManyField(Ticket)

forms.py (EmployerLoginForm только для user_nick и password):

class EmployerForm(forms.ModelForm):
    class Meta:
        model = Employee
        fields = "__all__"

class EmployerLoginForm(forms.ModelForm):
    class Meta:
        model = Employee
        exclude = ['dni', 'name', 'surname', 'email', 'telefone_number', 'ticket']

В этом случае для разработки функции входа в систему я использую EmployerLoginForm в views.py:

_logger = nexus_services_logs.Logging(statics.NEXUS_VIEWS_LOGGING_NAME)
_views_manager_service = nexus_services_views_manager.ViewsManagerService()
_auth = nexus_services_auth.Authentication()

class IndexView(View):

    def post(self, request, *args, **kwargs):
        form = EmployerLoginForm(request.POST)
        if(_auth.check_model_employer_authentication(form, _logger, _views_manager_service)):
            if(_views_manager_service.validate_form(form, _logger)):
                _views_manager_service.save_form(form, _logger)
            return redirect('employerPortal')
        else:
            return redirect('index')

check_model_employer_authentication(form, _logger, _views_manager_service) - это функция, в которой я хочу сравнить данные формы и набор запросов. Я нахожу проблему, когда не могу сравнить объекты, используемые для l oop (в auth.py):

class Authentication():

    def __init__(self):
        self.employer_exist = False

    def check_model_employer_authentication(self, model, logger, views_manager_service):
        queryset_all_employers = Employee.objects.order_by("id")
        context_exployers = views_manager_service.build_context_queryset_employers(queryset_all_employers) 
        for employer in context_exployers["employers"]:
            if(employer.user_nick == model.user_nick and employer.password == model.password):
                self.employer_exist = True
                logger.info_log("Exist nick with similar password")
                return True
            else:
                logger.error_log("Nick or password not exist or coincidence with object in db")
                return False

Я пытался использовать контекст, но не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...