2015-11-27 2 views
1

У меня есть член модели, который включает спецификацию 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 

Я хочу создать выпадающее меню сохраненных членов идентификаторов для пользователя, чтобы выбрать из в 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-адрес:

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

И ничего в моем select_member.html, потому что я не уверен, что положить.

Может ли кто-нибудь помочь мне с формой, видом и HTML? Я хочу, чтобы иметь возможность вызывать все идентификаторы членов, но Member.member_id.objects.all() не работает.

Также было бы здорово, если бы кто-нибудь мог сказать мне, как правильно вызывать все сохраненные идентификаторы членов - вместо неправильного элемента Member.member_id.objects.all().

+1

Вам не просто нужно положить '{{form}}'? Я думал, что «ModelChoiceField» все равно сделал элемент выбора (в терминах вашего редактирования просто «Member.objects.values ​​('member_id»), если я правильно понял – Sayse

+0

Вы имеете в виду, что мне просто нужно положить {{form} } в html? – korakorakora

ответ

2

Member.objects.values ​​('member_id') дает вам список словарей со значениями, структурированными как {'member_id': значение}.

Если вы просто хотите идентификаторы, вы можете сделать Member.objects.values_list ('member_id', flat = True), который просто даст вам список идентификаторов членов.

В любом случае вы пытаетесь использовать ModelChoiceField, который ожидает набор запросов экземпляров Model, и вы пытаетесь передать ему список пули.

То, что вы хотите сделать, это ModelChoiceField (QuerySet = Member.objects.all(), to_field_name = 'member_id') Обычно ModelChoiceFields получает идентификатор в качестве опции, но вы можете изменить его с помощью to_field_name:

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

+0

В классеSelectForm (forms.Form) в моих forms.py, когда я изменил его на 'memberid = forms.ModelChoiceField (queryset = Member.objects.all(), to_field_name = 'member_id')' Я получил ошибка атрибута, указывающая, что «объект типа« Member »не имеет атрибута« member_id ». Однако, когда я попытался использовать' memberid = forms.ModelChoiceField (queryset = Member.objects.values_list ('member_id', flat = True)) 'I не получило ошибку (так что я думаю, что это сработало). Как вы думаете, вы могли бы помочь мне с HTML, но? Правильно ли это? – korakorakora

+0

Какой Django вы используете? – snejy

+0

1.8.6 (последняя). – korakorakora

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