我为其他一些用户信息创建了userProfile。在这里我的模特:
class UserProfile(models.Model):
user = models.OneToOneField(User)
picture = models.ImageField(upload_to=get_upload_path, blank=True)
def __unicode__(self):
return self.user.username
def create_user_profile(sender, **kwargs):
u = kwargs["instance"]
if not UserProfile.objects.filter(user=u):
UserProfile(user=u).save()
post_save.connect(create_user_profile, sender=User)
我需要设置页面,在此页面中,我将同时更新用户和用户个人资料字段的某些字段。我的表格在这里:
class UpdateUserForm(ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name']
class UpdateUserProfileForm(ModelForm):
class Meta:
model = UserProfile
exclude = ['user']
我的模板中有一个表单,相关功能是:
def post(self, request, *args, **kwargs):
update_user_form = UpdateUserForm(data=request.POST, instance=request.user)
update_user_profile_form = UpdateUserProfileForm(data=request.POST)
if update_user_form.is_valid() and update_user_profile_form.is_valid():
user = update_user_form.save()
userProfile = update_user_profile_form.save(commit=False)
userProfile.user = user
userProfile.save()
在这种情况下我得到"列user_id不是唯一的"错误。为什么要尝试为此用户添加新的用户个人资料?
这种情况的最佳做法是什么?
谢谢
答案 0 :(得分:0)
前一段时间我遇到了同样的问题。最后,我选择更改自定义用户模型,使其继承自AbstractUser(有关此内容的更多信息:https://docs.djangoproject.com/en/dev/topics/auth/customizing/),而不是将其链接到带有onetoonefield的用户:
models.py:
class CustomUser(AbstractUser):
picture = models.ImageField(upload_to=get_upload_path, blank=True)
views.py:
class UpdateUser(LoginRequiredMixin, UpdateView):
model = CustomUser
fields = ('first_name', 'last_name', 'picture')
template_name = 'user/edit.html'
success_url = reverse_lazy('forum:top')