Django admin list过滤基于两个字段的计算字段
Django admin list filter calculated field based on two fields
这里显示了一个 django 模型。
class Allocation(models.Model):
allocated = models.IntegerField(default=5)
used = models.IntegerField(default=0)
user = models.ForeignKey(to=User, on_delete=models.CASCADE)
我使用计算字段如下。
def limit_exceeded(self, obj):
return obj.allocated == obj.used
我想用同样的逻辑在list_filter
上使用它。但是 SimpleListFilter
只允许一个 parameter_name
并且无法使用两个字段来检查条件。我怎样才能做到这一点?
像这样的东西应该可以工作,
from django.db.models import F
class SomeFilterName(admin.SimpleListFilter):
title = "any name"
parameter_name = "any_name"
def lookups(self, request, model_admin):
return [("True", True), ("False", False)]
def queryset(self, request, queryset):
if self.value() == "True":
return queryset.filter(allocated=F("used"))
elif self.value() == "False":
return queryset.exclude(allocated=F("used"))
return queryset
这里显示了一个 django 模型。
class Allocation(models.Model):
allocated = models.IntegerField(default=5)
used = models.IntegerField(default=0)
user = models.ForeignKey(to=User, on_delete=models.CASCADE)
我使用计算字段如下。
def limit_exceeded(self, obj):
return obj.allocated == obj.used
我想用同样的逻辑在list_filter
上使用它。但是 SimpleListFilter
只允许一个 parameter_name
并且无法使用两个字段来检查条件。我怎样才能做到这一点?
像这样的东西应该可以工作,
from django.db.models import F
class SomeFilterName(admin.SimpleListFilter):
title = "any name"
parameter_name = "any_name"
def lookups(self, request, model_admin):
return [("True", True), ("False", False)]
def queryset(self, request, queryset):
if self.value() == "True":
return queryset.filter(allocated=F("used"))
elif self.value() == "False":
return queryset.exclude(allocated=F("used"))
return queryset