私は現在、ユーザー情報を取り込んで保存するプロジェクトに取り組んでいます。私の問題は、ユーザーIDエラーで失敗したこのNOTNULL制約に遭遇し続けることです。これは、フォームが保存しようとしているときにnullユーザーがいることに起因すると思いますが、それを修正するために何ができるかわかりません。私はこの行を使ってみました:
form.user = Profile.objects.get(user=self.request.user)
しかし、それは機能せず、私にこのエラーを与えました:
/ users / pii /でのNameError
名前「自己」が定義されていません
私を正しい方向に向ける助けやアドバイスをいただければ幸いです。
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'
]
モデルの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
ユーザーと一緒にプロファイルを追加できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加