как исправить нулевое ограничение в Django - PullRequest
0 голосов
/ 15 мая 2019

Я создаю пользователя с использованием отношения OneToOne, когда я ввожу данные в форму и отправляю их, я получаю сообщение об ошибке нулевого ограничения

view.py

def registerUser(request):
    if request.method=='POST':
        form=UserCreationForm(request.POST)
        form_class=ProfileForm(request.POST)
        if form.is_valid() and form_class.is_valid():
            form.save()
            form_class.save()
            return redirect('/home/')
    else:
            form=UserCreationForm()
            form_class = ProfileForm()

    return render(request,'register.html',{'form':form,'form_class':form_class})

form.py

class Registerform(UserCreationForm):
    class Meta:
        model=User
        fields= ['username','first_name','last_name','password1','password2']

    def save(self, commit=True):
        user=super(Registerform, self).save(commit=False)
        user.first_name=self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']

        if commit:
            user.save()
        return user


class ProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = [ 'location']

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    description = models.TextField(max_length=500, blank=True)
    location = models.CharField(max_length=30, blank=True)
    birth_date = models.DateField(null=True, blank=True)
    salary=models.CharField(max_length=120)

    def __str__(self):
        return self.location

1 Ответ

1 голос
/ 15 мая 2019

Ваша модель UserProfile требует salary, но в вашей форме есть только поле location.Поэтому, когда ваша форма отправлена ​​с location, она действительна, но базовая модель не может быть сохранена, потому что salary будет None.

Добавьте поле salary в форму или сделайтеsalary Обнуляемое поле.

Кроме того, вам необходимо назначить поле user перед сохранением профиля, поскольку оно также не может быть пустым.Один из способов сделать это:

user = form.save()  # this is the UserForm so when saving it returns the user
profile = form_class.save(commit=False)
profile.user = user
profile.save()

Я бы порекомендовал вам внимательно прочитать документацию по Django на модельных формах .В частности, в разделе о методе сохранения объясняется, как правильно обрабатывать эти случаи.

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