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

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

Лучший ответ:

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 с ChoiceField Select:

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

См. Также пример Даниэля:

Ответ №1

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

from models import *
from django.forms import *

Это заставит объекты поля формы использоваться вместо объектов поля Model, у которых есть ключевое слово widget.

Оцените статью
TechArks.Ru
Добавить комментарий