models.py
from django.contrib.auth.models import User
class UserProfile(Model):
vendor_venue = BooleanField(default=False)
info = CharField(max_length=250)
user = OneToOneField(User, related_name='profile')
views.py
class OwnerProfileEdit(UpdateView):
model = User
form_class = UserForm
success_message = 'Profilul a fost actualizat'
def get_object(self, queryset=None):
return self.request.user
.....
def form_valid(self, form):
profile_form = UserProfileForm(self.request.POST)
if profile_form.is_valid():
profile_form.save(commit=False)
profile_form.user = self.request.user
profile_form.save()
return super(OwnerProfileEdit, self).form_valid(form)
forms.py
class UserProfileForm(ModelForm):
class Meta:
model = UserProfile
exclude = ('vendor_venue', 'user')
这是用于保存具有与用户的OneToOneField关系的用户个人资料的代码。
当我尝试保存个人资料时,我收到错误
(1048, "Column 'user_id' cannot be null")
为什么会这样?它不应该发生。我究竟做错了什么?谢谢 我指定如果我只使用UserForm,没有UserProfileForm,一切正常
感谢!!!
答案 0 :(得分:1)
您正在视图中保存表单并添加用户,但是您仍然在调用超类form_valid,它会在没有您的用户的情况下再次执行相同操作。
请参阅the documentation,了解如何在此处设置用户,而不是执行该保存。
修改抱歉,我误解了您的问题。问题实际上是你需要将用户设置为form.save返回的模型实例,而不是表单本身。
profile = profile_form.save(commit=False)
profile.user = self.request.user
profile.save()