django .db.utils.IntegrityError: Сбой ограничения NOT NULL: users_profile.user_id - PullRequest
0 голосов
/ 24 февраля 2020

В настоящее время я работаю над проектом, который будет принимать информацию о пользователях и сохранять ее. Моя проблема заключается в том, что я продолжаю сталкиваться с этим ограничением NOT NULL, с ошибкой идентификатора пользователя. Я полагаю, что это происходит из-за отсутствия пользователя, когда форма пытается сохранить, но не знаю, что я мог бы сделать, чтобы это исправить. Я попытался использовать эту строку:

form.user = Profile.objects.get(user=self.request.user)

, но она не сработала, и выдал эту ошибку:

NameError в / users / pii /

name «Я» не определено

Любая помощь или совет, который укажет мне правильное направление, будет принята с благодарностью!

models.py

class Profile(models.Model):

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    gender = models.CharField(max_length = 1, choices = GENS, default = '')
    birthday = models.DateField(default = '1900-01-01')
    address = AddressField(on_delete=False, blank=True, null=True)
    race = models.CharField(max_length = 2, choices = RACES, default = 'x')
    ethnicity = models.CharField(max_length = 1, choices = ETHNICITIES, default = 'x')
    income = models.CharField(max_length = 1, choices = INCBRACKET, default = 'x')
    education = models.CharField(max_length = 2, choices = EDUCATION, default = 'x')
    employment = models.CharField(max_length = 1, choices = EMPLOYMENT, default = 'x')

    def __str__(self):
        return f'{self.user.username} Profile'
    def save(self, *args, **kawrgs):
        super().save(*args, **kawrgs)
        img = Image.open(self.image.path)
        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)

views.py

def PII(request):
    if request.method == 'POST':
        form = PIIForm(request.POST,)
        if form.is_valid():
            form.save()
            messages.success(request, f'Your account has been created! You are now able to log in')
            return redirect('finalpii')
    else:
        form = PIIForm(request.POST)
    return render(request, 'users/pii.html', {'form':form})

forms.py

class PIIForm(forms.ModelForm):
    birthday = forms.DateField()
    class Meta:
        model = Profile
        fields = [
        'gender',
        'birthday',
        'address',
        'race',
        'ethnicity'
        ]

1 Ответ

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

Вы должны отредактировать поле user модели Profile как ...

user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True)

null=True, Django будет хранить пустые значения как NULL в базе данных. По умолчанию False.

blank=True, проверка формы позволит ввести пустое значение. По умолчанию False.

Затем выполните команды python manage.py makemigrations и python manage.py migrate, а затем вы можете добавить профиль с Null user.

...