我正在django1.4
中编写一个应用来展示Lesson
和Course
我希望提供一个edit_lesson
视图,其中Course
可以是用户选择。当显示编辑页面时,与课程相关联的课程应显示为默认选择。
我试着写这样的视图
def get_form_data(request):
return request.POST if request.method == 'POST' else None
def edit_lesson(request,id,template_name):
lesson = get_object_or_404(Lesson,pk=id,author=request.user)
form_data = get_form_data(request)
course_choices_form = CourseChoicesForm(form_data)
...
context = {'course_choices_form':course_choices_form,...}
if request.method == 'POST' and ....:
...
#if GET method ,display the form with initial data
course_choices_form = CourseChoicesForm(initial={'courseoption':lesson.course})
context.update({'course_choices_form':course_choices_form})
print "context['course_choices_form'].initial=",context['course_choices_form'].initial
return custom_render(request,context,template_name)
CourseChoicesForm就像
class CourseChoicesForm(forms.Form):
courseoption = forms.ChoiceField(choices=[],required=False,label='Course')
def __init__(self, *args, **kwargs):
super(CourseChoicesForm, self).__init__(*args, **kwargs)
self.fields['courseoption'].choices = [(x.id,x.title) for x in Course.objects.all()]
在edit_lesson模板中,我将course_choices_form显示为
{{ course_choices_form.as_p}}
尽管如此,下拉列表并没有显示课程的课程,只是Course.objects.all()中的第一个条目..
有人能告诉我我做错了吗?
答案 0 :(得分:3)
这就是我正在做的事情:
class CourseChoicesForm(forms.ModelForm):
courseoption = forms.ModelChoiceField(Courses.objects.all())
Django引擎负责制作填充ChoiceField的元组列表。 Courses.objects.all()
可以是任何查询集。
https://docs.djangoproject.com/en/dev/ref/forms/fields/#fields-which-handle-relationships