【问题标题】:Django Error: 'function' object has no attribute 'save'Django 错误:“函数”对象没有属性“保存”
【发布时间】:2012-03-17 13:20:17
【问题描述】:

谁能告诉我我做错了什么?

模型.py

class Cattest(models.Model):
category = models.ForeignKey(Category)    
info = models.CharField(max_length=35, blank=True)    

form.py

class CattestForm(forms.Form):
autocomplete = forms.CharField(
    label='Type the name of a category (AutoCompleteWidget)',
    widget=selectable.AutoCompleteWidget(CategoryLookup),
    required=False,
)
info = forms.CharField(max_length=35, label="Information")   

view.py

def cattest(request):
if request.method == 'POST':
    form = CattestForm(request.POST)
    if form.is_valid():
        cattest.save()        
else:
    if request.GET:
        form = CattestForm(initial=request.GET)
    else:
        form = CattestForm()
return render_to_response('bsmain/form.html', {'form': form}, context_instance=RequestContext(request))    

追溯:

/bsmain/cattest/ 处的属性错误

'function'对象没有属性'save'

请求方法:POST 请求网址:http://127.0.0.1:8000/bsmain/cattest/ Django 版本:1.3.1 异常类型:属性错误 异常值:

'function'对象没有属性'save'

异常位置:cattest 第 50 行中的 /home/bill/workspace/boatsite/../boatsite/bsmain/views.py Python 可执行文件:/usr/bin/python Python 版本:2.6.5

【问题讨论】:

  • 你不想在表单引用的模型上调用.save(),而不是视图函数本身吗?

标签: python django django-forms django-views django-apps


【解决方案1】:

您的视图中有一个 type-o。

您正在调用save() 上您在cattest.save() 中的函数 我认为这应该在表格上?您可能想查看ModelForm,它提供了一个直接映射到您的模型的表单,看起来就像您正在做的那样。

https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#django.forms.ModelForm

您使用的表单只是普通表单,没有保存方法。在继承 ModelForm 之后,您可以在表单实例上调用 save。

if your_form.is_valid():
  your_form.save()

【讨论】:

    【解决方案2】:

    您正在调用函数本身的保存方法。这就是错误背后的原因。如果您正在寻找要保存的表单:

    if form.is_valid():
        form.save()
    

    【讨论】:

      【解决方案3】:

      class CattestForm(forms.Form): 应该是class CattestForm(forms.<strong>Model</strong>Form):

      【讨论】:

      • 我们很乐意看到一些解释与您的回答相结合。请您解释一下为什么您认为这会解决问题?
      猜你喜欢
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 2021-09-17
      • 2017-01-22
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多