创建成员ID的下拉菜单

时间:2015-11-27 08:07:01

标签: python django django-forms django-views

我有一个模型成员,其中包含一个名为member_id的规范。

class Member(models.Model):
    member_id = models.SlugField(max_length=10)
    name = models.CharField(max_length=200)
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
    mobile = models.SlugField(max_length=20)
    def __str__(self):
         return self.name 

我想创建一个存储成员ID的下拉菜单,供用户在select_member.html中进行选择。

现在,我在 forms.py 中有这个:(很确定这是错的)

class SelectForm(forms.Form):
    memberid = forms.ModelChoiceField(queryset=Member.member_id.objects.all())

以下观点:

class SelectView(generic.ListView):
  template_name = 'expcore/select_member.html'
  model = Activity

  def select_member(request):
    form = SelectForm()
    if request.method == 'POST':
      form = SelectForm(request.POST)
      if form.is_valid():
        return HttpResponseRedirect('/questions/')
    else:
      form = SelectForm()
    return render(request, 'select_member.html', {'form': form})

网址:

url(r'^activity/(?P<activityname>[^/]+)/member/$', views.SelectView.as_view(), name='select_member'),

我的select_member.html中没有任何内容,因为我不知道该放什么。

有人可以帮我解决表单,视图和HTML吗?我希望能够调用所有成员ID,但Member.member_id.objects.all()不起作用。

此外,如果有人能告诉我如何正确调用所有存储的成员ID,而不是错误的Member.member_id.objects.all(),那就太棒了。

1 个答案:

答案 0 :(得分:2)

Member.objects.values(&#39; member_id&#39;)为您提供字典列表,其值的结构为{&#39; member_id&#39;:value}。

如果您只想要ID,可以使 Member.objects.values_list(&#39; member_id&#39;,flat = True),这只会为您提供成员ID列表。< / p>

无论如何,你尝试使用ModelChoiceField,它需要一个Model实例的查询集,你试图传递一个slug列表。

你想做的是 ModelChoiceField(queryset = Member.objects.all(),to_field_name =&#39; member_id&#39;) 通常ModelChoiceFields会将ID作为选项,但您可以使用to_field_name覆盖它:

https://github.com/django/django/blob/master/django/forms/models.py#L1129-L1144