我需要在模板中显示一个简单的选择输入。
此输入基于对象的选择,并且应该具有选定的值。
它不会用于任何发往服务器的帖子。
staffs = Staff.objects.filter(staff__company=comp)
selected_staff = staffs[0]
staffs
是我需要在选择中显示的人
我发现这个输入非常冗长,所以我想知道是否应该利用一个小表单,而不是在模板中手动编写输入。
所以问题是,我应该<option>
手动编写输入还是应该使用内置小部件?
我需要在模板中显示一个简单的选择输入。
此输入基于对象的选择,并且应该具有选定的值。
它不会用于任何发往服务器的帖子。
staffs = Staff.objects.filter(staff__company=comp)
selected_staff = staffs[0]
staffs
是我需要在选择中显示的人
我发现这个输入非常冗长,所以我想知道是否应该利用一个小表单,而不是在模板中手动编写输入。
所以问题是,我应该<option>
手动编写输入还是应该使用内置小部件?
使用内置总是更好。您还可以使用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 将处理表单的其余验证和初始化...