我有一个模型成员,其中包含一个名为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(),那就太棒了。
答案 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