1

我需要在模板中显示一个简单的选择输入。
此输入基于对象的选择,并且应该具有选定的值。
它不会用于任何发往服务器的帖子。

staffs = Staff.objects.filter(staff__company=comp)
selected_staff = staffs[0]

staffs是我需要在选择中显示的人

我发现这个输入非常冗长,所以我想知道是否应该利用一个小表单,而不是在模板中手动编写输入。

所以问题是,我应该<option>手动编写输入还是应该使用内置小部件?

4

1 回答 1

1

使用内置总是更好。您还可以使用Field.initial设置字段的初始值。文档在这里

定义一个选项并将其设置在模板上(可能使用 javascript)要困难得多。

更新:

class MyStaffForm(forms.Form):
    <your form structure here>
    ...
    <end of your form structure>


def Myview(request):
    ....
    staffs = Staff.objects.filter(staff__company=comp)
    #override form class to add a new form field
    MyStaffForm.base_fields['staff']=forms.ChoiceField(choices=[[(s.id, s) for s in staffs], initial=staff[0].id)

这就是您处理表单类的方式。但是覆盖基 Form class usingforms.ChoiceField不是一个好的选择,因为您使用查询集来定义选择。所以用 aModelChoiceField代替

MyStaffForm.base_fields['staff']=forms.ModelChoiceField(queryset=staffs, initial=staff[0])

Django 将处理表单的其余验证和初始化...

于 2012-05-11T09:18:46.693 回答