我需要通过OrderingFilter过滤平均(非模型)字段.

我的Models.py

class Product(models.Model):
    store = models.ForeignKey(Store, on_delete=models.CASCADE, null=True, verbose_name="store")
    sku = models.CharField(max_length=255, blank=True, default="", verbose_name="SKU")
    name = models.CharField(max_length=255, blank=True, default="", verbose_name="name")

class ProductInfo(models.Model):
    default_related_name = "productinfo"

    product = models.OneToOneField("Product", on_delete=models.CASCADE, null=True, verbose_name="product")
    barcode = models.CharField(max_length=255, null=True, verbose_name="barcode")
    price = models.DecimalField(max_digits=7, decimal_places=2, default=Decimal(0), verbose_name="price")
    cost_price = models.DecimalField(max_digits=7, decimal_places=2, default=Decimal(0), verbose_name="cost price")
    vat = models.DecimalField(max_digits=3, decimal_places=1, default=Decimal(0), verbose_name="% tax")

I通过OrderingFilter过滤产品

我的filters.py

from products.models import Product
from django_filters import OrderingFilter
from django_filters.rest_framework import FilterSet

class ProductFilter(FilterSet):
    order_by_field = "ordering"
    ordering = OrderingFilter(
        fields=(
            "name",
            (("productinfo__price"), ("price")),
            (("productinfo__barcode"), ("barcode")),
        )
    )

    class Meta:
        model = Product

我需要计算一下销售的利润.这可以在单独的函数中完成,也可以使用注释. price-cost_price-taxes_sum=profit个 但此参数不是模型字段.我可以以某种方式将其添加到过滤器中吗?目标是通过分拣获得能带来更多利润的商品.

推荐答案

您可以按如下方式将字段添加到筛选器集:

import django_filters

class ProductFilter(FilterSet):
    profit = django_filters.CharFilter(method='profit_filter', label='profit')

    class Meta:
        model = Product
        fields = [
            'profit'
            ]

    def profit(self, queryset, name, value):
        return queryset.annotate().filter()

Django相关问答推荐

在Django中使用Generil.ListView类时,分页不起作用

如何在创建对象后立即运行一次代码?

Templatetag 在 Django 4.2 模板 IF 条件中不起作用

Django:获取每组最新的N条记录

基于模型多选字段在模板django中显示结果

基于每个条目的 Django Queryset 过滤

Django中的多对多关系?

Django - 站点匹配查询不存在

Django:使用 Django ORM 实现 JOIN?

多租户 Django 应用程序:根据请求更改数据库连接?

将现有 auth.User 数据迁移到新的 Django 1.5 自定义用户模型?

如何在 Django 中向 ChoiceField 添加class?

related_name 参数在 Django 模型中没有按预期工作?

无效的块标签: static

在 django admin 中链接到外键对象

Django 自定义用户邮箱帐户验证

ProgrammingError: 安装 Psycopg2 后,关系django_session不存在错误

如何过滤(或替换)在 UTF-8 中占用超过 3 个字节的 unicode 字符?

Django:必须使用对象 pk 或 slug 调用通用详细视图

ImportError:没有名为 django_filters 的模块