__init__() получил неожиданный ключевой аргумент "виджет"

Я пытаюсь запустить страницу веб-приложения, которая использует форму ниже;

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 и перехожу по локальному URL-адресу, я получаю страницу 500 с ошибкой __init__() got an unexpected keyword argument 'widget', где я пытался использовать виджет.

Это, вероятно, какая-то основная ошибка, которую я делаю, но если бы кто-нибудь мог указать мне правильное направление, это было бы большой помощью - желательно с некоторым кодом.


person Mark Corrigan    schedule 23.07.2014    source источник


Ответы (2)


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'}))

См. также пример Даниэля здесь:

person alecxe    schedule 23.07.2014

Другая возможность получения этого сообщения об ошибке заключается в том, что Django имеет разные типы полей при работе с моделями баз данных и моделями форм. Убедитесь, что ваши включения расположены в правильном порядке; включать формы ПОСЛЕ моделей. Если вы делаете что-то вроде:

from models import *
from django.forms import *

Это заставит объекты поля формы использоваться вместо объектов поля модели, которые ДЕЙСТВИТЕЛЬНО имеют ключевое слово widget.

person Fydo    schedule 11.04.2015