class ScreenListView(ScreenViewMixin, ModelViewMixin, ListCreateAPIView): serializer_class = ScreenSerializer filter_class = filterset_factory(Screen, fields=('name', )) ordering = 'name' def perform_create(self, serializer): return Screen.create(serializer.validated_data)
def get_filterset_class(self): if self.filterset_class: return self.filterset_class elif self.get_filterset_fields(): return filterset_factory(model=self.model, fields=self.get_filterset_fields()) return None
def export(self, request, *args, **kwargs): # 1. Get the iterator of the QuerySet previous_week = timezone.now() - timedelta( days=timezone.now().weekday(), weeks=1) year = previous_week.year week = previous_week.isocalendar()[1] Filter = filterset_factory(models.PassageHourAggregation, fields=['year', 'week']) qs = Filter(request.GET).qs # If no date has been given, we return the data of last week # Since the last week of the year can contain days of both years # we will search in both years. if not request.GET.get('year') and not request.GET.get('week'): monday = previous_week sunday = monday + timedelta(days=6) qs = qs.filter(date__gte=monday, date__lte=sunday) qs = (qs.annotate(bucket=ExpressionWrapper( F("date") + HoursInterval(F("hour")), output_field=DateTimeField()), ).values( "camera_id", "camera_naam", "bucket").annotate(sum=Sum("count")).order_by("bucket")) # 2. Create the instance of our CSVExport class csv_export = CSVExport() # 3. Export (download) the file return csv_export.export("export", qs.iterator(), streaming=True)
def get_suppliers_ledger_data(request): data = [] context = {} if request.method == "GET": supplier_id = request.GET.get("supplier", "") supplier_id = int(supplier_id) if supplier_id.isdigit() else 0 if supplier_id == 0: qs = SupplierPayment.objects.none() else: qs = SupplierPayment.objects.filter(supplier__shop=request.shop) SupplierPaymentFilter = filterset_factory(model=SupplierPayment, fields=["supplier"]) f = SupplierPaymentFilter(request.GET, queryset=qs) columns = [ 'supplier__name', 'payment_type', 'payment_date', 'description', 'amount' ] vs = list(f.qs.values(*columns)) for obj in vs: row = {} row["name"] = obj["supplier__name"] row["amount"] = obj["amount"] row["pament_type"] = obj["payment_type"] row["pament_date"] = obj["payment_time"] row["description"] = obj["description"] row["remaining_amount"] = "" data.append(row) context["ledger_list"] = data context["selected_supplier"] = supplier_id return context
def test_view_with_filterset_not_model(self): factory = RequestFactory() request = factory.get(self.base_url) filterset = filterset_factory(Book) view = FilterView.as_view(filterset_class=filterset) response = view(request) self.assertEqual(response.status_code, 200) for b in ['Ender's Game', 'Rainbow Six', 'Snowcrash']: self.assertContains(response, b)
def do_field_filtering(self, request, queryset): """ This performs field level filtering on the result set Eg: ?title=James Joyce """ # Get filterset class filterset_class = filterset_factory(queryset.model) # Run field filters return filterset_class(request.GET, queryset=queryset).qs
def get_filterset_class(self): """ Returns the filterset class to use in this view """ if self.filterset_class: return self.filterset_class elif self.model: return filterset_factory(self.model) else: msg = "'%s' must define 'filterset_class' or 'model'" raise ImproperlyConfigured(msg % self.__class__.__name__)
def get_filterset_class(self): """ Returns the filterset class to use in this view """ if self.filterset_class: return self.filterset_class elif self.model: return filterset_factory(model=self.model, fields=self.filterset_fields) else: msg = "'%s' must define 'filterset_class' or 'model'" raise ImproperlyConfigured(msg % self.__class__.__name__)
def _get_filter_class(self, model: Type[Model]) -> Type: return filterset_factory(model)
def get_api_filter_class(self): return self.api_filter_class or filterset_factory(self.model)
def get_list_filter_class(self): return self.list_filter_class or filterset_factory(self.model)