У меня есть форма 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,
})