2010-03-11 3 views
3

Я написал пользовательский MultipleChoiceField. У меня все работает нормально, но когда я отправляю форму, выбранные значения возвращаются к исходным вариантам, даже если форма проверена в порядке.формы django MultipleChoiceField возвращается к исходному значению при сохранении

мой код выглядит примерно так:

class ProgrammeField(forms.MultipleChoiceField): 
    widget = widgets.SelectMultiple 

class ProgrammeForm(forms.Form): 
    programmes = ProgrammeField(required=False) 

    def __init__(self, user, *args, **kwargs): 
     self.fields['programmes'].choices = Mymodel.objects.all() 
     self.fields['programmes'].initial = Mymodel.objects.filter(created=user) 

view.py 
if request.method == 'POST': 
    form = ProgrammeForm(user=request.user, data=request.POST) 
    if form.is_valid(): 
     form.save() 
form = ProgrammeForm(request.user) 

return render_to_response(form.html', {'form': form }) 

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

Благодарности

ответ

3

Вы всегда передавая обратно несвязанный экземпляр формы , попробуйте следующее:

view.py

if request.method == 'POST': 
    form = ProgrammeForm(user=request.user, data=request.POST) 
    if form.is_valid(): 
     form.save() 
else: ##this is the changge 
    form = ProgrammeForm(request.user) 
return render_to_response('form.html', {'form': form }) 
+0

Это работало, но почему бы не прямой:. self.fields [ 'программы'] = начальная Mymodel.objects.filter (создано = пользователь) установить значения в правильные? – John

+0

Читайте о формах. 'choice' должен быть списком кортежей, а' initial' должен быть списком значений. Вы передаете 'QuerySets' для обоих. Я предполагаю, что это часть вашей проблемы. – Zach

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