Нулевое значение в столбце "user_id" нарушает ненулевое ограничение. ПОДРОБНЕЕ: - PullRequest
0 голосов
/ 19 марта 2019

Получается ошибка, но данные формы регистрации пользователя сохраняются, но данные Employerform не сохраняются.

Это ошибка, которую я получаю: - нулевое значение в столбце "user_id" нарушает ненулевое ограничение ПОДРОБНОЕ ОПИСАНИЕ: Ошибка в строке содержит (18,asda, asdasd, строительство, чистая оплата, нет, возраст, квартал, полугодие, год, ноль)

Models.py

class EmployerUser(models.Model):
    id                              = models.AutoField(primary_key=True)
    user                            = models.ForeignKey(User,on_delete=models.CASCADE)
    company_name                    = models.CharField(max_length=20,default="")
    address                         = models.TextField(default="")
    industry                        = models.CharField(choices=INDUSTRY,max_length=20,default="")
    isSalarySacrifies               = models.CharField(max_length=20,choices=SALARYSACRIFIES,default=False)
    isNetpayRelief                  = models.CharField(max_length=20,choices=NETPAY,default=False)
    contribution_type               = models.CharField(choices=CONTRI_TYPE,max_length=20,default="")
    contribution_change_type        = models.CharField(choices=CONTRI_CHANGE_TYPE,max_length=20,default="")
    payrise_type                    = models.CharField(choices=PAYRISE,max_length=20,default="")
    bonus_type                      = models.CharField(choices=BONUS,max_length=20,default="")

    def __str__(self):
        return self.company_name

views.py

def register_view(request):
next = request.GET.get('next')
form             = UserRegisterForm(request.POST or None)
profileform      = EmployerUserForm(request.POST or None)

if form.is_valid() and profileform.is_valid():
    user = form.save(commit=False)
    profile = profileform.save(commit=False)
    password = form.cleaned_data.get('password')
    user.set_password(password)
    user.save()
    profile.save()
    new_user = authenticate(email=user.email, password=password)

    login(request, new_user)
    if next:
        return redirect(next)
    return redirect('login')

context = {
    'form': form,
    'profileform': profileform,
}
return render(request, "registration/signup.html", context)

EmployerUserForm

class EmployerUserForm(ModelForm):
    company_name               = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Company Name'}))
    address                    = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Address'}))
    industry                   = forms.ChoiceField(choices = INDUSTRY,widget=forms.Select())
    isSalarySacrifies          = forms.ChoiceField(choices=SALARYSACRIFIES,widget=forms.RadioSelect())
    isNetpayRelief             = forms.ChoiceField(widget=forms.RadioSelect(),choices=NETPAY)
    contribution_type          = forms.ChoiceField(label="Contribution Type",choices = CONTRI_TYPE,widget=forms.Select())
    contribution_change_type   = forms.ChoiceField(label="Contribution Change Rate Type",choices = CONTRI_CHANGE_TYPE,widget=forms.Select())
    payrise_type               = forms.ChoiceField(label="Payrise",choices = PAYRISE,widget=forms.Select())
    bonus_type                 = forms.ChoiceField(label="Bonus",choices = BONUS,widget=forms.Select())
    class Meta:
        model = EmployerUser
        fields = [
            'company_name',
            'address',
            'industry',
            'isSalarySacrifies',
            'isNetpayRelief',
            'contribution_type',
            'contribution_change_type',
            'payrise_type',
            'bonus_type',
            ]

1 Ответ

1 голос
/ 19 марта 2019

похоже, что вам нужно установить пользователя для вашего сотрудника:

<code>profile = profileform.save(commit=False)
<b>profile.user = user</b>
profile.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...