Форма Django работает первый раз, но не все остальные - PullRequest
0 голосов
/ 06 мая 2020

У меня есть форма Django для фильтрации набора запросов. Я использую там MultipleChoiceField.

Когда я в первый раз выполняю форму, она работает нормально, но после этого похоже, что все параметры проверены.

Я добавил строку сообщения в часть формы в представлении, только если у меня есть оба значения. При втором запуске формы она распечатывается.

Заранее спасибо!

Форма

class FilterEmpresaFulbergForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(FilterEmpresaFulbergForm, self).__init__(*args, **kwargs)
        self.fields['Nombre'].required = False
        self.fields['pais'].required = False
        self.fields['company_type'].required = False

    company_type = (
        ('Client', 'Client'),
        ('Supplier', 'Supplier'),
       )

    mis_clientes = forms.BooleanField(required=False, initial=False, label='Extra cheeze')
    company_type = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=company_type, required=False)

    class Meta:
        model = Contactos_Fulberg
        fields = ('Nombre', 'pais')

    def save(self, commit=True):
        return super(FilterEmpresaFulbergForm, self).save(commit=commit)

Вид

@login_required
def EmpresasFulbergView(request):
    page_title = str("Empresas")
    now = date.today() - timedelta(days=365)
    filter_form = FilterEmpresaFulbergForm(request.POST)
    empresa_form = EmpresaFulbergForm(request.POST)

    if request.user.groups.filter(name="Dirección").exists() or request.user.groups.filter(name="Comex").exists():
        all_contact = Contactos_Fulberg.objects.all()
    else:
        all_contact = Contactos_Fulberg.objects.filter(propietario=request.user)

    total_listado = all_contact.count()

    alerta_desde = date.today() - timedelta(days=90)

    if request.method == "POST" and 'filtro' in request.POST:
        filter_form = FilterEmpresaFulbergForm(request.POST)
        if filter_form.is_valid():

            Nombre = filter_form.cleaned_data['Nombre']
            if Nombre:
                all_contact = all_contact.filter(Nombre__icontains=Nombre)

            pais = filter_form.cleaned_data['pais']
            if pais:
                all_contact = all_contact.filter(pais__icontains=pais)

            mis_clientes = filter_form.cleaned_data['mis_clientes']
            if mis_clientes:
                all_contact = all_contact.filter(propietario=request.user)

            company_type = filter_form.cleaned_data['company_type']
            if company_type:

                if "Client" in company_type and "Supplier" in company_type:
                    a = 1
                    messages.info(request, 'Esto filtra')
                elif "Client" in company_type:
                    all_contact = all_contact.filter(es_cliente=True)
                elif "Supplier" in company_type:
                    all_contact = all_contact.exclude(es_cliente=True)

    return render(request, 'website/companies.html', {
        'page_title': page_title,
        'empresa_form': empresa_form,
        'now': now,
        'filter_form': filter_form,
        'all_contact': all_contact,
        'alerta_desde': alerta_desde,
    })
...