gpt4 book ai didi

python - Django ModelForm - 使用外键创建实例

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:37 25 4
gpt4 key购买 nike

我想知道当它包含所需的 FK 时,使用 Django 模型表单创建模型实例的正确方法是什么?我认为这可能与 exclude 类属性有关,但在 View 中我正在尝试在保存之前覆盖它。

型号:

 class Profile(models.Model):
client = models.OneToOneField('auth.User')
first_name = models.TextField(blank=True,)
...

表格:

class ProfileForm(floppyforms.ModelForm):
class Meta:
exclude = ('client',)
model = Profile

widgets = {
'first_name': floppyforms.TextInput(attrs={'placeholder': 'First Name'}),
...

查看:

def post(self, request):
form = ProfileForm(request.POST)
if form.is_valid():
form.save(commit=False)
form.client = User.objects.create(username=request.POST['email'],)
form.save()
return redirect('/success')
return redirect('/error')

错误:

django.db.models.fields.related.RelatedObjectDoesNotExist: Profile has no client.

查看管理员,我可以看到用户已创建。 enter image description here

干杯

最佳答案

您的 views.py 中有错误。应该是:

def post(self, request):
form = ProfileForm(request.POST)
if form.is_valid():
new_profile = form.save(commit=False)
new_profile.client = User.objects.create(username=request.POST['email'],)
new_profile.save()
return redirect('/success')
return redirect('/error')

您不应该将客户端分配给您的表单,而是分配给内存中的实例 new_profile,然后调用 new_profile.save() 来保存 new_profile 到数据库。

关于python - Django ModelForm - 使用外键创建实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32621962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com