__init __()得到了一个意外的关键字参数'widget'

时间:2014-07-23 16:09:55

标签: django typeerror django-forms django-widget

我正在尝试运行使用以下表单的网页应用页面;

class InputParametersForm(ModelForm):

    sqlConnection = SQLSeverConnection(
        'MSSQLServerDataSource',
        'default_user',
        'password123!!',
        'HD'
    )
    tableChoices = sqlConnection.getTableNames()
    TableName = forms.Select(
        widget=forms.Select(attrs={'class': 'selector'})
    )
    ColumnName = forms.Select(
        widget=forms.Select(attrs={'class': 'selector'})
    )
    StartDateTime = forms.DateField(
        widget=SelectDateWidget(
            empty_label=("Choose Year", "Choose Month", "Choose Day")
        )
    )
    EndDateTime = forms.DateField(
        widget=SelectDateWidget(
            empty_label=("Choose Year", "Choose Month", "Choose Day")
        )
    )

    class Meta:
        model = SelectionHistory
        fields = ("TableName", "ColumnName", "StartDateTime", "EndDateTime")

当我运行manage.py runserver并转到本地网址时,我收到500页错误__init__() got an unexpected keyword argument 'widget'我试图使用该小部件。

这可能是我正在犯的一些基本错误,但是如果有人能指出我正确的方向,那将是一个很大的帮助 - 最好有一些代码。

2 个答案:

答案 0 :(得分:1)

接收此错误消息的另一种可能性是Django在处理数据库模型和表单模型时具有不同类型的字段。确保您的包含顺序正确;包括表格AFTER模型。如果您按照以下方式执行某些操作:

from models import *
from django.forms import *

这将强制使用Form的字段对象,而不是具有widget关键字的Model&#39}字段对象。

答案 1 :(得分:0)

forms.Select是一个小部件,它不是Field,并且没有widget参数。这是错误报告的内容。这是你基本上拥有的:

>>> from django import forms
>>> forms.Select(widget=forms.Select)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: __init__() got an unexpected keyword argument 'widget'

相反,您的意思是ChoiceField包含Select小部件:

TableName = forms.ChoiceField(widget=forms.Select(attrs={'class': 'selector'}))

另见Daniel的例子: