如何在Django中描述model方法生成的SQL查询数?

如何在Django中描述model方法生成的SQL查询数?,django,django-models,django-queryset,Django,Django Models,Django Queryset,我有一个模型方法,它使用一些不是“ForeignKey”的数据来计算对象状态 每个product.status都会生成额外的SQL请求。有没有办法“预取”queryset中所有对象的模型方法结果?请共享您的Sale模型。entity\u ref=models.BigAutoField()为什么这样做?改为使用ForeignKey(即使内容类型框架在引用多个模型时会更好,但我还是更喜欢泛化/专门化(在数据库规范化的上下文中)而不是内容类型框架)…@WillemVanOnsem done。使用For

我有一个模型方法,它使用一些不是“ForeignKey”的数据来计算对象状态


每个
product.status
都会生成额外的SQL请求。有没有办法“预取”queryset中所有对象的模型方法结果?

请共享您的
Sale
模型。
entity\u ref=models.BigAutoField()
为什么这样做?改为使用
ForeignKey
(即使内容类型框架在引用多个模型时会更好,但我还是更喜欢泛化/专门化(在数据库规范化的上下文中)而不是内容类型框架)…@WillemVanOnsem done。使用ForeignKey无法直接将销售与产品关联起来,因为销售包含使用修饰符的各种其他实体类型的数据。@AbdulAzizBarkat无法使用ForeignKey,因为销售模型包含各种实体的数据,不仅是产品的数据,还包括房地产的数据,服务模型等,以定义销售模型中使用的“某些字符串参数”的实体类型。数据库结构不是使用Django构建的,所以它是原样的。@AbdulAzizBarkat hm,看起来我需要使用内容类型框架在这些模型之间建立foreignKey?
class Product(models.Model):

    id = models.BigAutoField(primary_key=True)
    name = models.CharField(max_length=20, null=True)

    def status(self):
        sales_data = Sale.objects \
                         .filter(
                         some_string_parameter='goods',
                         entity_ref=self.id
                         ) \
                     .aggregate(Max('discount')).get('discount')

        if not sales_data:
            return "No Sale"
        elif sales_data >= 50:
            return "Sale over 50%"
        elif sales_data < 50:
            return "Sale less than 50"

class Sale(models.Model):
    id = models.AutoField(primary_key=True)
    some_string_parameter = models.CharField(max_length=100) # define reffering entity type
    entity_ref = models.BigAutoField() # refer to various entities types
    discount = models.IntegerField() # amount of discount
{% for product in products %}

    {{ product.name }} - {{ product.status }}

{% endfor %}