django form widget checkboxselectmultiple如何呈现User.last_name

时间:2014-04-12 15:14:38

标签: django forms checkbox widget

Django / Python中的新手。我使用django表单在用户中进行选择。 首先,查询集根据group__name进行过滤,然后表单生成带有复选框小部件的HTML。它基本而且运作良好。 我希望HTML显示' User.last_name User.email'。不仅仅是' User.username'除了复选框。 是否可以(并且很容易)更改此窗口小部件的默认行为?

# 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>

1 个答案:

答案 0 :(得分: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")