Фильтрующая модель django с входными параметрами из шаблона html - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть модель в следующем формате

model.py

raccntname = models.TextField(max_length=100)
raccntnum = models.TextField(max_length=100)
rLMV = models.DecimalField(max_digits=10, decimal_places=2, null=True)
rSMV = models.DecimalField(max_digits=10, decimal_places=2, null=True)
rcash = models.DecimalField(max_digits=10, decimal_places=2, null=True)
requity = models.DecimalField(max_digits=10, decimal_places=2, null=True)
rLOMV = models.DecimalField(max_digits=10, decimal_places=2, null=True)
rSOMV = models.DecimalField(max_digits=10, decimal_places=2, null=True)
rhousereq = models.DecimalField(max_digits=10, decimal_places=2, null=True)
rhouseexcess = models.DecimalField(max_digits=10, decimal_places=2, null=True)
rregtexcess = models.DecimalField(max_digits=10, decimal_places=2, null=True)
date = models.TextField(max_length=100)
entity = models.TextField(max_length=100)

Я хочу отфильтровать эту модель на основе выбора из приведенных ниже списков объектов

forms.py

class Datechoicefield(forms.Form):
date = forms.ModelChoiceField(
    queryset= BNPPBMrgnDecmp.objects.values_list('date', flat=True).distinct(), initial='2/10/2020',
    empty_label = None,
)

class entitychoicefield(forms.Form):
entity = forms.ModelChoiceField(
    queryset= BNPPBMrgnDecmp.objects.values_list('entity', flat=True).distinct(), initial='VNI3',
    empty_label = None,
)

html template

<form method='GET' action="{% url 'update' %}">
     {{ date_list }}
     {{ entity_list }}
     <input type='submit'>
</form>

Выборки из списка объектов передаются в представление с помощью следующего

view.py

def myview(request):
    date_list = Datechoicefield()
    entity_list = entitychoicefield()
    if request.GET.get('date'):
    selected_date = request.GET.get('date')
    obj = BNPPBMrgnDecmp.objects.filter(date=selected_date)
        if request.GET.get('entity'):
            selected_entity = request.GET.get('entity')
            obj = BNPPBMrgnDecmp.objects.filter(raccntname=selected_entity)
    else:
    obj = BNPPBMrgnDecmp.objects.filter(date='2/10/2020', entity='VNI3')

Приведенная выше модель должна фильтровать по дате и по сущности. Однако когда объекты из формы выбираются из шаблона html, результаты фильтруются только по дате и выдают данные для ВСЕХ объектов (где выбран только один). Кроме того, оператор else работает для фильтрации на указанную дату / сущность. Что-то не так с моими утверждениями if?

1 Ответ

0 голосов
/ 21 февраля 2020

В настоящее время каждый применяемый вами фильтр относится ко всем BNPPBMrgnDecmp объектам. Ie. каждое obj = BNPPBMrgnDecmp.objects.filter() - это совершенно новое задание.

Рассмотрим что-то вроде следующего:

filtered = BNPPBMrgnDecmp.objects.all()

if request.GET.get('date'):
    selected_date = request.GET.get('date')
    # Set to the existing filtered variable
    filtered = filtered.filter(date=selected_date)

if request.GET.get('entity'):
    selected_entity = request.GET.get('entity')
    # If there was a 'date' in request.GET, the filter will 
    # already be applied to the queryset now in the filtered variable
    filtered = filtered.filter(raccntname=selected_entity)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...