2014-04-12 2 views
1

Rookie in Django/Python. Я использую форму django для выбора среди пользователей. Сначала фильтр запросов выбирается в соответствии с именем group__name, затем форма генерирует HTML с помощью виджета. Это базовая и хорошо работающая. Я хочу, чтобы HTML отображал «User.last_name User.email». Не только «User.username» в стороне от флажка. Возможно ли (и легко) изменить поведение этого виджета по умолчанию?django form widget checkboxselectmultiple как визуализировать User.last_name

# model is User 
# forms 
class SelMembersForm(forms.Form): 

    qs = User.objects.filter(groups__name='any_group_name') 
    picked = forms.ModelMultipleChoiceField(qs, widget=forms.CheckboxSelectMultiple()) 

# views 
def members_select(request): 
    if request.method == 'POST': 
     form = SelMembersForm(request.POST) 
     if form.is_valid(): 
      picked = form.cleaned_data.get('picked') 

    else: 
     form = SelMembersForm 

    return render_to_response('staff/selmembers.html', {'form':form }, 
    context_instance=RequestContext(request)) 


# template 
<form method='post'> {% csrf_token %} 
    {{ form.as_p }} 
    <input type='submit' value='submit'> 
</form> 

ответ

0

Ну, я реализовал аналогичную проблему, надеюсь, что это сработает для вас.

Сначала я сделал два метода в forms.py:

def appended_list(items, item): 
    items.append(item) 
    return items 


def inserted_list(items, index, item): 
    items.insert(index, item) 
    return items 

теперь показать список по этим:

picked= forms.ChoiceField(required=False, widget=forms.SelectMultiple(initial=1, choices=inserted_list([(x.id, x.username+": "+x.first_name+" "+x.last_name) for x in User.objects.all()], 0, ('0', ' --')),label="PICKED") 
Смежные вопросы