Skip to main content
 首页 » 编程设计

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

2025年05月04日37bonelee

我想知道当它包含所需的 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. 

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

干杯

请您参考如下方法:

您的 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 到数据库。