【问题标题】:Django : request.POST error "__init__() takes 1 positional argument but 2 were given"Django:request.POST 错误“__init__() 采用 1 个位置参数,但给出了 2 个”
【发布时间】:2019-01-06 08:42:47
【问题描述】:

我的 Django 项目中有一个简单的表单:

forms.py

class DamageListCriteria(forms.Form):
    fromdate = forms.CharField(widget=forms.widgets.DateTimeInput(attrs={'type': 'datetime-local'}))
    todate = forms.CharField(widget=forms.widgets.DateTimeInput(attrs={'type': 'datetime-local'}))

class Meta:
    fields = ['fromdate','todate']

views.py

class DamageListCriteria(TemplateView):
template_name = "damage/damagelist_criteria.html"

def get(self, request):
    form = DamageListCriteria()
    general = General.objects.get(pk=1)
    args = {
        'form': form,
        'general': general
    }
    return render(request, self.template_name, args)

def post(self, request):
    general = General.objects.get(pk=1)
    form = DamageListCriteria(request.POST)

    args = {
           'form': form,
           'general': general
           }
    return render(request, self.template_name, args)

urls.py

url(r'damage/list/criteria/$', views.DamageListCriteria.as_view(), name="damage-list-criteria"),

当我尝试发布时,我收到此错误: '__init__() 接受 1 个位置参数,但给出了 2 个'

错误出现在 form = DamageListCriteria(request.POST) 代码行。

提前感谢您的宝贵时间

【问题讨论】:

    标签: python django


    【解决方案1】:

    这是因为您使用相同的名称定义了表单类和视图类。所以更改视图或表单类的类名。

    或更改您各自的文件如下,

    forms.py(已将表单类名更改为DamageListCriteriaForm

    class DamageListCriteriaForm(forms.Form):
        fromdate = forms.CharField(widget=forms.widgets.DateTimeInput(attrs={'type': 'datetime-local'}))
        todate = forms.CharField(widget=forms.widgets.DateTimeInput(attrs={'type': 'datetime-local'}))
    
        class Meta:
            fields = ['fromdate', 'todate']


    views.py(更改表单类的引用)

    class DamageListCriteria(TemplateView):
        template_name = "damage/damagelist_criteria.html"
    
        def get(self, request):
            form = DamageListCriteriaForm()
            general = General.objects.get(pk=1)
            args = {
                'form': form,
                'general': general
            }
            return render(request, self.template_name, args)
    
        def post(self, request):
            general = General.objects.get(pk=1)
            form = DamageListCriteriaForm(request.POST)
    
            args = {
                'form': form,
                'general': general
            }
            return render(request, self.template_name, args)

    【讨论】:

      【解决方案2】:

      您在views.py 中重新定义了DamageListCriteria 类。因此,您正在尝试实例化您的视图类,而不是表单。

      尝试将视图名称更改为DamageListCriteriaView,或/和表单更改为DamageListCriteriaForm

      【讨论】:

      • 感谢您的宝贵时间。抱歉,我不能接受作为答案,因为有人先发布了相同的答案
      猜你喜欢
      • 1970-01-01
      • 2022-10-06
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多