Django-фильтр, отображающий все записи, при отправке пустой формы - PullRequest
0 голосов
/ 20 сентября 2019

Прямо сейчас я выполнил функцию фильтрации, используя django-filters.Но при отправке формы пусто, ее выборка всех записей.Мой код работает нормально.Я ограничил django-фильтр отображением всех записей при запуске страницы. Также я не хочу отображать все записи при отправке пустой формы.

version_filter.html

<form action="" method="GET">
    <button class="btn btn-primary btn-sm" type="submit">Submit</button> 
        {{filters.form.as_table}}                         
</form> 

просмотров.py

def bfs_version_filter(request):
    version_obj = bfs_versions.objects.all()
    filter_obj = version_filter(request.GET, queryset = version_obj)
    return render(request, 'bfslite/version_filter.html', {
        'filters' : filter_obj,})

filter.py

class version_filter(django_filters.FilterSet):
bfs_version_code = django_filters.CharFilter(lookup_expr = 'icontains', label = "Version")
bfs_version_status = django_filters.ChoiceFilter(field_name = "bfs_version_status", choices=TASK_STATUS, lookup_expr='exact', label = "Version Status")
bfs_version_end_date = django_filters.DateFilter(widget=forms.widgets.DateInput(attrs={'type':'date'}), label= "End Date")
bfs_version_uploaded_on = django_filters.DateRangeFilter(label= "Uploaded on")
bfs_task_code__bfs_client_eta = django_filters.DateFilter(widget=forms.widgets.DateInput(attrs={'type':'date'}), label= "Client Date")
bfs_shot_code__bfs_shot_code = django_filters.CharFilter(lookup_expr = 'exact', label = "Shot")
bfs_task_code__bfs_task_name = django_filters.CharFilter(lookup_expr = 'exact', label = "Task")
#payable and paid 
bfs_version_payable = django_filters.BooleanFilter(field_name='bfs_version_payable', lookup_expr= 'exact', label = "Payable")
bfs_version_paid = django_filters.BooleanFilter(field_name='bfs_version_paid', lookup_expr= 'exact', label = "Paid")

def __init__(self, *args, **kwargs):
    super(version_filter, self).__init__(*args, **kwargs)
    if self.data == {}:
        self.queryset = self.queryset.none()

class Meta:
    model=bfs_versions
    fields=[
        'bfs_version_code',
        'bfs_version_status',
        'bfs_version_end_date',
        'bfs_version_uploaded_on',
        'bfs_task_code__bfs_client_eta',
        'bfs_shot_code__bfs_shot_code',
        'bfs_task_code__bfs_task_name',
        'bfs_version_payable',
        'bfs_version_paid',
        ]
...