Django Forms: пустые kwargs из представлений

Я пытаюсь инициализировать форму Django с параметром из представления. Однако, когда я пытаюсь использовать kwargs в init формы, я получаю, что он всегда пуст. Почему это могло быть? Я что-то пропустил?

Мое представление (имя файла: «FirstView.py»):

def create_userStory(request, proyect_id):

if request.method=='POST':
    auxForm = UserStoryForm(request.POST, proyect_id=proyect_id)

Моя форма (имя файла: «forms.py»):

class UserStoryForm(forms.ModelForm):

def __init__(self, *args, **kwargs):
    proyectId = kwargs.pop('proyect_id', None)
    super(UserStoryForm, self).__init__(*args, **kwargs)
    team = Team.objects.get(proyect_id=proyectId)

Я пытался отладить/печатать kwargs в своей форме, но всегда получаю {}, что означает, что параметр из представления не прошел.

Раньше я пытался следовать этим существующим вопросам:

форма django: передача параметра из представления. py в формы выдает ошибку

Django Forms: передать параметр в форму

Набор форм Django — пустые kwargs


person sdo310    schedule 24.04.2015    source источник


Ответы (2)


У меня такая же проблема. После одного часа поиска (...) я обнаружил, что в моем вызове __init__ :

myModelForm(request.POST, namedargument=val)

val на самом деле было None, когда я думал, что оно содержит значение.

Затем для __init__: если namedargument=None ==> только namedargument. И kwargs становится args !

Вот почему кварги были пусты.

Итак, проверьте значение, которое вы передаете, вероятно, оно None по ошибке.

(Я знаю, это ответ на 2 года, но мне бы очень хотелось найти его час назад...)

person ThePhi    schedule 01.09.2017

*args и **kwargs в подписи используются для перехвата аргументов, которые не были заняты другими определенными позициями аргументов. Все неиспользованные неименованные аргументы будут помещены в список args, а все именованные аргументы — в словарь kwargs. Вы можете изменить имена, если хотите.

Пример:

def function_1(a, b, *args, **kwargs):

Звонок вроде

function_1(1, 2, 3, 4, c=5, d=6)

приведет к следующим переменным, доступным внутри function_1:

a = 1
b = 2
args = (3, 4)
kwargs = {'c': 5, 'd': 6}

Таким образом, применительно к вашему вопросу это означает, что пока у вас нет именованных аргументов, у вас будет пустой kwargs.

person Klaus D.    schedule 24.04.2015
comment
у него есть именованные аргументы: proyect_id: `auxForm = UserStoryForm(request.POST, proyect_id=proyect_id)`. Так что я не думаю, что проблема была отсюда. - person ThePhi; 01.09.2017