django **后面的reverse()参数必须是Map

v2g6jxz6  于 2023-02-05  发布在  Go
关注(0)|答案(2)|浏览(151)

我有一个报名表,提交时不工作.
我得到这个错误:

    • 后面的reverse()参数必须是Map,而不是str**

这是我的看法:

def inscription(request, seance_id):
    seance = get_object_or_404(Variant, id=seance_id)
    inscription_config = {'form_class': InscriptionForm,
                          'extra_context': {'seance': seance}}    

    return create_object(request, **inscription_config)

我的表单:

class InscriptionForm(forms.ModelForm):
    class Meta:
        model = Inscription
        
    def clean(self):
        cleaned_data = self.cleaned_data
        email = cleaned_data.get("mail")
        mail_confirmation = cleaned_data.get("mail_confirmation")
    
        if email != mail_confirmation:
            raise forms.ValidationError("Les deux adresses mails doivent correspondre")
    
        return cleaned_data

触发错误的似乎是return语句中的inscription_config,但我不知道为什么。

    • 编辑**

环境:
申请方法:POST请求URL:http://127.0.0.1:8039/formations/inscription/1/ Django版本:1.2.5 Python版本:2.7.2安装的应用程序:["django.contrib.auth'、" django.contrib.comment'、"django.contrib.contenttypes"、"django.contrib.sessions"、"django.contrib.sites"、"django.contrib.messages"、"django.contrib.admin"、"确认编辑器"、"常量"、"常量后端数据库"、"自定义平面页面"、"django扩展"、"django移动"、"django xmlrpc"、"简易缩略图"、"gestion格式"、"文件上载器"、"less"、"mppt"、"contact"、"newsletter"、"pagination"、"south"、"sentry"、"sentry. client"、"索引器"、"分页"、"内容管理员"、"画廊"]已安装的中间件:("恼人的中间件静态服务"、"django中间件通用通用中间件"、"django贡献会话中间件会话中间件"、"django中间件csrf视图中间件"、"django贡献验证中间件"、"django贡献消息中间件消息中间件"、"分页中间件分页中间件")
追溯:
文件"/usr/local/lib/python2.7/dist-packages/django/core/handlers/www.example.com "在获取响应100中。响应=回调(请求,* 回调参数,**回调kwargs)文件"/home/anass/项目/c139_fc_finance/fc_finance/gestion_formations/视图/www.example.com"在题记24中。表单类=题记表单文件"/usr/local/lib/python2.7/dist-packages/django/视图/通用/base.py(*(参数+更多参数),**dict(参数,*更多参数))get_absolute_url 969中的文件"/usr/local/lib/python2.7/dist-packages/django/db/models/www.example.com "。返回设置。 carts.py(self, args,kwargs)文件"/usr/local/lib/python2.7/dist-packages/django/db/models/init. py "在内部32中。返回反向(位[0],无, 位[1:3])文件"/usr/local/lib/python2.7/dist-packages/django/core/www.example.com "反向351. * 参数,**kwargs)))functional.py" in _curried 55. return _curried_func((args+moreargs),**dict(kwargs,**morekwargs)) File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in get_absolute_url 969. return settings.ABSOLUTE_URL_OVERRIDES.get('%s.%s' % (opts.app_label, opts.module_name), func)(self, *args,**kwargs) File "/usr/local/lib/python2.7/dist-packages/django/db/models/init.py" in inner 32. return reverse(bits[0], None, *bits[1:3]) File "/usr/local/lib/python2.7/dist-packages/django/core/ www.example.com " in reverse 351. *args,*kwargs)))
异常类型:类型错误位于/formations/intration/1/异常值:
* 后面的reverse()参数必须是Map,而不是字符串

3duebb1j

3duebb1j1#

我试着回答,因为我也有同样的问题,但没有在网上找到答案。
我认为这个问题的根源是一个错误的get_absolute_url(...)方法,比如你这样写:

@models.permalink
def get_absolute_url(self):
    return reverse('my_named_url', kwargs={ "pk": self.pk })

然后它会引发异常reverse() argument after ** must be a mapping, not str。通过删除@models.permalink装饰器来修复它,如下所示:

def get_absolute_url(self):
    return reverse('my_named_url', kwargs={ "pk": self.pk })

或者可替换地保持装饰器并修改主体,如下所述:

@models.permalink
def get_absolute_url(self):
    return ('my_named_url', (), { "pk": self.pk })

不过,我认为后者已经过时了。

ljsrvy3e

ljsrvy3e2#

淘气逗号

return redirect(reverse_lazy('team-detail', kwargs={'pk', team.pk}))

应该是

return redirect(reverse_lazy('team-detail', kwargs={'pk': team.pk}))

相关问题