Сравните значения из значения поля формы и значения набора запросов - PullRequest
1 голос
/ 09 октября 2019

В моем приложении форма регистрации выглядит следующим образом:

Forms.py

class EmployeeSignUpForm(UserCreationForm):
    company = forms.ModelChoiceField(queryset=Company.objects.all(), required=True, label='Select Company')
    c_code = forms.IntegerField(required=True)    
    class Meta(UserCreationForm.Meta):
        model = User

    @transaction.atomic
    def save (self):
        user = super().save(commit=False)
        user.is_employee = True
        user.save()

        c_company = self.cleaned_data['company'][0]

        employee = Employee.objects.create(user=user, company=c_company)    
        return user

Как я могу сравнить c_code с кодом компании в моих моделях. py и сохранить форму только тогда, когда они совпадают, иначе выдает ошибку?

Models.py

class Company(models.Model):
    company_name = models.CharField(max_length=255, default=0)
    company_email = models.EmailField(max_length=255, default=0)
    company_phone = models.CharField(max_length=255, default=0)
    company_code = models.IntegerField(default=0)

    def __str__ (self):
        return self.company_name

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Мое решение:

@transaction.atomic
    def save (self):

        if self.cleaned_data['company'].company_code == self.cleaned_data['c_code']:
            user = super().save(commit=False)
            user.is_employee = True
            user.save()
            c_company = self.cleaned_data['company']
            employee = Employee.objects.create(user=user, company=c_company)
            return user
        else:
            raise ValidationError("Don't save")
0 голосов
/ 09 октября 2019

Вы можете сделать что-то вроде:

def clean_c_code(self):
    c_code = int(self.cleaned_data['c_code'])
    try:
        Company.objects.get(c_code=c_code)
    except Company.DoesNotExist:
        raise ValidationError("Don't save")
...