Django ModelForm,它包含模型中没有的额外字段?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (102)

我做了一个ModelForm,添加了一些额外的字段不是在模型里。在保存表单时,我使用这些字段进行计算。

在上传表单时,这些字段将在POST请求中发送。问题是它们没有添加到cleaned_data当我验证表单。

提问于
用户回答回答于

首先,你不应该有艺术家_ID和艺术家字段。它们是根据模型建造的。

此外,您还试图从清理后的_数据内部清洁值。可能没有您需要的数据--您应该使用来自Sel.data的值,其中数据是直接来自POST的。

用户回答回答于

可以扩展DjangoModelForm有额外的字段。假设您有一个自定义用户模型,下面是ModelForm:

class ProfileForm(forms.ModelForm):

    class Meta:
        model = User
        fields = ['username', 'country', 'website', 'biography']

现在,假设您想要包含一个额外的字段(不存在于您的用户模型中,比如图像化身)。通过以下操作扩展表单:

from django import forms

class AvatarProfileForm(ProfileForm):

    profile_avatar = forms.ImageField()

    class Meta(ProfileForm.Meta):
        fields = ProfileForm.Meta.fields + ('profile_avatar',)

最后(假设表单具有ImageField),请记住包括request.FILES在视图中实例化表单时:

# (view.py)

def edit_profile(request):
    ...
    form = AvatarProfileForm(
        request.POST or None, 
        request.FILES or None, 
        instance=request.user
    )
    ...

我在AvatarProfileForm.Meta.field属性中得到了“只能连接元组(而不是”list“)的错误。

扫码关注云+社区