2014-04-12 40 views
1

Django/Python中的新手。我正在使用django表單來選擇用戶。 首先查詢集根據group__name過濾,然後表單使用複選框小部件生成HTML。這是基礎和良好的工作。 我想HTML顯示'User.last_name User.email'。除了複選框外,不僅有'User.username'。 是否有可能(也很容易)改變這個小部件的默認行爲?django表單部件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")