在django表单类中追加查询集

时间:2014-08-26 19:21:20

标签: python django django-models django-forms

我在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",
    )

如果我可以在q1q2之间附加禁用的输入以用作标签,则可以使用此功能。有谁知道我会怎么做?

1 个答案:

答案 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')