【问题标题】:Can't save a form in Django (object has no attribute 'save')无法在 Django 中保存表单(对象没有属性“保存”)
【发布时间】:2013-05-08 14:15:00
【问题描述】:

以下是我的表格:

class AdvancedSearchForm(forms.Form):
    valueofres = forms.ChoiceField (label="res", choices = ((0, 0),(2.2, 2.2)), required= False)

以下是我的看法:

def advancedsearch(request):
    if request.method == "POST":
        search = AdvancedSearchForm(request.POST, request.FILES)
        if search.is_valid():
            new_search = search.save(commit=False)

为什么我收到错误 'AdvancedSearchForm' object has no attribute 'save'

【问题讨论】:

  • save 默认仅适用于ModelForm,不适用于forms.Form

标签: django django-forms


【解决方案1】:

save 默认仅适用于ModelForm,不适用于forms.Form

你需要做的是这个。要么使用:

class AdvancedSearchForm(forms.ModelForm):
    valueofres = forms.ChoiceField (label="res", choices = ((0, 0),(2.2, 2.2)), required= False)
    class Meta:
        model=Search #or whatever object

或者:

def advancedsearch(request):
    if request.method == "POST":
        search_form = AdvancedSearchForm(request.POST, request.FILES)
        if search_form.is_valid():
            cd = search_form.cleaned_data
            search = #populate SearchObject()
            search.save()

【讨论】:

  • 在选项 1 中,您需要使用 forms.ModelForm
【解决方案2】:

Forms 没有save() 方法。

您需要使用ModelForm (docs),因为它会与model 相关联,并且知道要保存什么。

或者,您可以保留您的 forms.Form,但您需要从 for 中提取有效数据并按照您的方式处理 eh 数据。

if request.method == "POST":
    search_form = AdvancedSearchForm(request.POST, request.FILES)
    if search_form.is_valid():
        cd = search_form.cleaned_data

        search = Search(
            # Apply form data
        )
        search.save()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 2020-10-27
    • 2012-03-17
    • 1970-01-01
    • 2020-05-07
    • 2019-10-18
    • 1970-01-01
    相关资源
    最近更新 更多