我在django 1.4中有这个课程:
class ProgramForm(forms.ModelForm):
...other fields...
program_interests = forms.ModelMultipleChoiceField(
widget=forms.Select(),
queryset= Programs.objects.filter(is_active=True),
required=True,
label="Program Interest",
)
这很好用;模板看起来像这样:
{% get_fieldset other_fields,program_interests as the_fields from programform %}
{% for field in the_fields %}
<li id="li_{{field.html_name}}">
<label for="id_{{ field.html_name }}">{{ field.label }}</label>
{{ field }}
</li>
{% endfor %}
我的'程序'模型有type
程序的字段。我想要做的是填充program_interests
'ModelMultipleChoiceField
并先按type
程序排序,然后再输入alpha。每个type
程序都会在下拉列表中显示一个标签(禁用选项)。所以,我想做的是这样的事情:
qs1 = Programs.objects.filter(is_active=True, type=1),
qs2 = Programs.objects.filter(is_active=True, type=2),
qs3 = Programs.objects.filter(is_active=True, type=3),
queryset = qs1 | qs2 | qs3,
但这不起作用。如果我以正确的方式解决这个问题,不知道吗?
编辑:我尝试了什么
q1 = Q(is_active=True,type=1)
q2 = Q(is_active=True,type=2)
q3 = Q(is_active=True,type=3)
program_interests = forms.ModelMultipleChoiceField(
widget=forms.Select(),
queryset= Programs.objects.filter(q1 | q2 | q3).order_by('type'),
required=True,
label="Program Interest",
)
如果我可以在q1
和q2
之间附加禁用的输入以用作标签,则可以使用此功能。有谁知道我会怎么做?
答案 0 :(得分:0)
您不能“或”查询集,您应该或条件然后排序。
我觉得这样的事情会奏效:
from django.db.models import Q
q1 = Q(is_active=True, type=1)
q2 = Q(is_active=True, type=2)
q3 = Q(is_active=True, type=3)
queryset = Programs.objects.filter(q1 | q2 | q3).order_by('type')