2015-02-05 3 views
1

Я искал googled, пытаясь понять и понять, как это работает, но я до сих пор не понял это совершенно правильно. То, что я хочу сделать, это передать значение в форму, чтобы затем использовать для запроса. У меня есть переменная сеанса, называемая menu_term, которая определяет выбор в форме.Передача значений в формы django

из views.py

def manage_groups(request): 
    form = CourseGroupForm(request,current_term=request.session.get('menu_term')) 
return render_to_response("accounts/group_management.html", {'form':form}, context_instance=RequestContext(request)) 

из forms.py

class CourseGroupForm(ModelForm): 
def __init__(self, current_term, *args, **kwargs): 
    super(CourseGroupForm, self).__init__(*args, **kwargs) 
    courseslist = Course.objects.filter(term=current_term, num_in=settings.LAB_COURSES).order_by('description').distinct(); 
    print(courseslist) 
    self.fields['courses'].queryset = forms.ChoiceField(label='Select Course', choices=courseslist) 

class Meta: 
    model = CourseGroup 
    fields = ['name','courses']; 

Ошибка я получаю:

__init__() got multiple values for keyword argument 'current_term' 

В пользу кого-либо другого наступающем через это, каковы правильные способы определения формы, которая принимает значение, переданное извне?

Спасибо, Доброго дня MJ

ответ

5

Важно, чтобы вытолкнуть kwarg инстанцирования своей формы с перед вызовом формы супер __init__

class CourseGroupForm(ModelForm): 
def __init__(self, current_term, *args, **kwargs): 
    current_term = kwargs.pop('current_term') 
    super(CourseGroupForm, self).__init__(*args, **kwargs) 

выше предполагает current_term всегда присутствует.

, как @vishen отметил, проверить свои аргументы, вы инициализация своей формы с request в качестве значения для current_term

+0

Вы также можете позвонить 'del' на kwarg: "del kwargs ['current_term']", чтобы удалить его. – bmhkim

+1

Также укажите, что эта строка «self.fields ['courses»]. Queryset = forms.ChoiceField (label =' Select Course ', choice = classeslist) "неверно. Он назначает поле, где должен быть задан запрос – Alvaro

2

Погрешности происходит потому, что в вашей модели форме инициализации decleration

class CourseGroupForm(ModelForm): 
    def __init__(self, current_term, *args, **kwargs) 

current_term - это первый аргумент, который форма ожидает найти, но потому, что вы сначала проходите через объект request, а затем current_term, после чего вы эффективно передаете fo llowing

form = CourseGroupForm(current_term=request,current_term=request.session.get('menu_term')) 

Следовательно, несколько значений для сообщения аргумента ключевого слова current_term.

Смежные вопросы