【问题标题】:displaying initial data in dropdown list in django在 django 的下拉列表中显示初始数据
【发布时间】:2012-09-23 09:47:26
【问题描述】:

我正在django1.4 中编写一个应用程序来显示Lessons 和Courses。我想提供一个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() 中的第一个条目..

谁能告诉我我做错了什么?

【问题讨论】:

  • 如果您使用自定义choices,您需要将适当的值设置为初始值,在这种情况下它是整数。这应该有效:CourseChoicesForm(initial={'courseoption':lesson.course.id})。但@xbello 回答可能是更好的使用方法。
  • 感谢您的回复..将尝试@xbello的方式

标签: django forms drop-down-menu


【解决方案1】:

这就是我正在做的事情:

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

【讨论】:

  • 但是它将如何设置默认选择值?
  • 当您从视图构建表单时(行 'course_choices_form = CourseChoicesForm(form_data)'),将“初始”值传递给构造函数:'course_choices_form = CourseChoicesForm(initial = Courses.objects.获取(pk=id).id)'。我以为你的问题只是 ChoiceField 的人口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 2013-06-16
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
相关资源
最近更新 更多