Ala*_*gey 0 django django-models
我有以下观点,效果非常好:
@transaction.atomic
def register(request):
next_url = request.POST.get('next', request.GET.get('next', reverse('profile')))
if request.method == 'POST':
form = RegistrationForm(request.POST)
profileform = ProfileForm(request.POST)
if form.is_valid() and profileform.is_valid():
new_user = form.save()
# Login the newly created user.
authenticated_user = authenticate(username=new_user.username,
password=form.cleaned_data['password1'])
login(request, authenticated_user)
return redirect(next_url)
else:
form = RegistrationForm()
profileform = ProfileForm()
return render(request, 'meta/register.html', {'form': form, 'profileform': profileform, 'next': next_url})
Run Code Online (Sandbox Code Playgroud)
但是,当我希望使用以下行保存其他配置文件信息时(位于 new_user = form.save() 行下方):
new_user_profile = profileform.save()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Exception Type: IntegrityError
Exception Value: (1048, "Column 'user_id' cannot be null")
Run Code Online (Sandbox Code Playgroud)
我的配置文件模型如下:
class Profile(models.Model):
user = models.OneToOneField(User)
dob = models.DateField(max_length=8)
class Meta:
managed = True
db_table = 'fbf_profile'
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒,艾伦。
当使用这样的外键时,您通常会看到保存commit=False,然后在模型上手动设置外键。例如,
new_user = form.save()\nprofile = profileform.save(commit=False)\nif profile.user_id is None:\n profile.user_id = new_user.id\nprofile.save()\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n此
\nsave()方法接受一个可选的commit关键字参数,该参数接受True或False。如果您使用 调用save(),commit=False那么它将返回一个尚未保存到数据库的对象。在这种情况下,由您决定调用save()生成的模型实例。如果您想在保存对象之前对其进行自定义处理,或者如果您想使用专门的模型保存选项之一,这非常有用。commit是True默认的。
| 归档时间: |
|
| 查看次数: |
6092 次 |
| 最近记录: |