You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django Admin中让variation_price模型仅显示已有变体的产品?

实现方法

要在Django Admin的variation_price模型中,让product字段只显示存在对应Variation记录的产品,你可以通过自定义Admin类并重写字段查询集来实现,具体步骤如下:

1. 编写Admin自定义类

在项目的admin.py文件中,为variation_price模型创建自定义的Admin类,重写formfield_for_foreignkey方法,对product字段的可选范围进行过滤:

from django.contrib import admin
from .models import variation_price, Product

class VariationPriceAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        # 针对product字段进行过滤
        if db_field.name == "product":
            # 筛选出存在至少一条Variation记录的产品,用distinct去重避免重复选项
            kwargs["queryset"] = Product.objects.filter(variation__isnull=False).distinct()
        return super().formfield_for_foreignkey(db_field, request, **kwargs)

# 注册自定义的Admin类
admin.site.register(variation_price, VariationPriceAdmin)

代码说明

  • formfield_for_foreignkey是Django Admin提供的钩子方法,用于修改外键字段的查询集。
  • Product.objects.filter(variation__isnull=False):通过反向关联(Variation模型的product外键会在Product模型上生成variation反向查询名)筛选出存在Variation记录的产品。
  • .distinct():因为一个产品可能对应多条Variation记录,用这个方法去除查询结果中的重复产品,避免下拉选项里出现重复项。

额外说明

如果你的Product模型本身有is_active这类状态字段,需要同时过滤活跃产品的话,可以修改查询集为:

kwargs["queryset"] = Product.objects.filter(is_active=True, variation__isnull=False).distinct()

内容的提问来源于stack exchange,提问作者Niiteesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:27:13