【问题标题】:TypeError when form is submitted in django在 django 中提交表单时出现 TypeError
【发布时间】:2012-05-08 19:06:59
【问题描述】:

我在 /item/3/sell_offer/4/ 有一个表格
与 action="add_post/"

我希望它转到 /item/3/sell_offer/4/add_post

相关的urlpatterns是

(r'^item/(?P<item_id>\d+)/sell_offer/(?P<sell_offer_id>\d+)/$', views.sell_offer_page),
(r'^item/(?P<item_id>\d+)/sell_offer/(?P<sell_offer_id>\d+)/add_post/$', views.sell_offer_add_post),

视图看起来像..

def sell_offer_add_post(request, item_id, sell_offer_id):
    p = request.POST

    if p.has_key("body") and p["body"]:
        post = SellOfferPost(sell_offer=SellOfferPost.objects.get(pk=sell_offer_id))
        form = SellOfferPostForm(p, instance=post)
        post = form.save()
        post.save()

    return HttpResponseRedirect(reverse('views.sell_offer_page', args=[item_id, sell_offer_id]))

我认为发布操作实际上并没有找到通往视图的方式。
以下是错误信息

Request Method: POST
Request URL:    http://......:8000/item/1/sell_offer/4/add_post/
Django Version: 1.3.1
Exception Type: TypeError
Exception Value:    
sell_offer_add_post() got an unexpected keyword argument 'item_id'
Exception Location: /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/core/handlers/base.py in get_response, line 111

我在这里做错了什么?

【问题讨论】:

    标签: django forms typeerror


    【解决方案1】:

    确保您没有调用其他视图 sell_offer_add_post() 进一步向下。

    【讨论】:

    • 要对此进行扩展...@Eugene-如果您的 settings.py 中有 DEBUG=True,您应该会获得一个非常强大的回溯页面,该页面可以准确地显示正在发生的代码位在,允许您验证它不是具有不同签名的重复视图。
    • 嗯,我没有任何其他的 sell_offer_add_post 功能。 @jdi:我发布的错误输出是使用 DEBUG=True 生成的,我只粘贴了相关信息。
    【解决方案2】:

    尝试将您的视图签名设置为:

    def sell_offer_add_post(request, item_id=None, sell_offer_id=None):
    

    我还没有测试过,但如果我没记错的话,当您在 URL 中使用命名捕获组时,我认为 django 会尝试传递命名关键字。您需要检查视图中的值。

    【讨论】:

      猜你喜欢
      • 2021-06-15
      • 1970-01-01
      • 2021-06-15
      • 2013-07-13
      • 2021-07-09
      • 2020-05-11
      • 1970-01-01
      • 2017-07-07
      • 2020-05-30
      相关资源
      最近更新 更多