私はこのページで作業しています。ユーザーは電話のような属性を編集できます。IntegrityError:App_userprofile.user_idがNULLでない可能性があります。
これらの属性は、組み込みユーザーモジュールまたはUserProfile
(user = OneToOneField(User)
)のいずれかに格納できます。
私は更新用のカスタムフォームを作成しました。ユーザーがxxx/edit-profile
に行くと、これらのフォームはuser
とuser.userprofile
インスタンスで埋められます。問題がform.save()
中に、エラーが発生していることを、私はこのフォームにすべてのフィールドが含まれていませんでしたから、次のとおりです。
フォーム:
IntegrityError: App_userprofile.user_id may not be NULL
を明確にするために、私は、フォーム、モデルとビューを添付します:
class UserUpdateForm(forms.ModelForm):
class Meta:
model = User
fields = ('last_name','first_name',)
class UserProfileUpdateForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('telephone',)
ビュー:
@login_required
def edit_user(request):
user = request.user
user_profile = user.userprofile
if request.method=='POST':
user_profile_update_form = UserProfileUpdateForm(request.POST)
user_update_form = UserUpdateForm(request.POST)
if user_profile_update_form.is_valid() and user_update_form.is_valid():
user_update_form.save()
user_profile_update_form.save()
return render(request,'auth/profiles/my-profile.html')
else:
print user_profile_update_form.errors
print user_update_form.errors
else:
user_profile_update_form = UserProfileUpdateForm(instance=user_profile)
user_update_form = UserUpdateForm(instance=user)
return render(request,'auth/profiles/edit-profile.html',
context={'user_profile_update_form':user_profile_update_form,
'user_update_form':user_update_form})
MODEL:
class UserProfile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE,related_name='userprofile')
# ATRIBUTY KTORE BUDE MAT KAZDY
telephone = models.CharField(max_length=40,null=True)
HOW_DO_YOU_KNOW_ABOUT_US_CHOICES = (
('coincidence',u'It was coincidence'),
('relative_or_friends','From my relatives or friends'),
)
how_do_you_know_about_us = models.CharField(max_length=40, choices=HOW_DO_YOU_KNOW_ABOUT_US_CHOICES, null=True)
MARITAL_STATUS_CHOICES = (
('single','Single'),
('married','Married'),
('separated','Separated'),
('divorced','Divorced'),
('widowed','Widowed'),
)
marital_status = models.CharField(max_length=40, choices=MARITAL_STATUS_CHOICES, null=True)
# OD KIAL STE SA O NAS DOZVEDELI
# A STAV
def __unicode__(self):
return '{} {}'.format(self.user.first_name,self.user.last_name)
def __str__(self):
return '{} {}'.format(self.user.first_name,self.user.last_name)
おそらくデザインを再考する必要があります。あなたが望むフィールドを尋ねてカスタムユーザサブクラスを作成する方がずっと簡単です。 –
@DanielRosemanあなたはUserProfileのやり方をやるほうがいいと思いますか?どのようにあなたがそれを意味するのかを私に見せていただければ幸いです。ありがとう –
[カスタムユーザーモデルの置き換え](https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#substituting-a-custom-user-model)のドキュメントを参照してください。 –