Skip to main content
 首页 » 编程设计

python之Django admin no error-隐藏高级查找部分

2024年10月24日34虾米姐

我的查询运行良好。

Variation.objects.filter(size__stock__stock__in=[1,2]).filter(product__tag__name__in=['Basics', 'This']).distinct('product').count() 

但是,我无法在我的 admin.py 中显示查询中单个产品的计数。

class TagAdmin(admin.ModelAdmin): 
... 
    def male_only_count(self, obj): 
        return obj.product_set.filter(gender=1).filter(size__stock__stock__in=[1,2]).distinct('product').count() 

我正在尝试做的事情:

正在尝试查找标签名称为“XYZ”且库存水平为“3”的商品。

查找类似于库存水平 > 尺寸 > 变化 > 产品 > 标签

我的模型:

class Tag(models.Model): 
    name = models.CharField(max_length=100, blank=False) 
 
class Product(models.Model): 
    name = models.CharField ("Name", max_length=400) 
    tag = models.ManyToManyField(Tag, blank=True) 
 
class Variation(models.Model): 
    product = models.ForeignKey(Product, db_index=True, blank=False, null=False) 
    variation = models.CharField (max_length=80, blank=True) 
 
class Size(models.Model): 
    variation = models.ForeignKey(Variation, blank=False, null=False) 
    size = models.CharField("Size", max_length=100, blank=True) 
 
Stock_CHOICES = ( 
    (1, 'In Stock'), 
    (2, 'Low Stock'), 
    (3, 'Out of Stock'), 
    (4, 'Discontinued'), 
) 
 
class Stock(models.Model): 
    size = models.ForeignKey(Size, blank=False, null=False) 
    stock = models.IntegerField(choices=Stock_CHOICES) 
    created = models.DateTimeField("Created", auto_now_add=True) 

我没有收到错误 - 管理员只是没有加载与标签相关的字段。

请您参考如下方法:

我看到的第一件事是您正在过滤 gender=1 而我在 Product 模型中没有看到 gender 字段。我只是假设它就在那里,为了简洁起见,您将其省略了。

在您的工作示例中,您正在使用以下内容过滤 Variation 对象:

filter(size__stock__stock__in=[1,2]) 

在您的管理示例中,您试图过滤具有相同定义但产品没有尺寸属性的产品。试试这个:

filter(variation__size__stock__stock__in=[1,2]) 

要从该查询集中获取不同 Variation 对象的数量,您需要使用聚合:

.aggregate(num_variations=Count('variation', distinct=True)) 

综合起来:

return obj.product_set.filter(gender=1).filter(variation__size__stock__stock__in=[1,2]).aggregate(num_variations=Count('variation', distinct=True))['num_variations']