如何在查询中比较模型的两个字段?

iva*_*123 7 django compare filter aggregate-functions

我正在编写一个管理命令,它会根据建议的价格过滤产品的原始价格.

我有一个产品型号,看起来像:

class Suggestion(models.Model):
    ....
    price = models.IntegerField()

class Product(models.Model):
    price = models.IntegerField()
    suggestions = models.ManyToManyField(Suggestion)
Run Code Online (Sandbox Code Playgroud)

我想过滤所有价格等于最低建议的产品.有点像:

Product.objects.filter(price = minumum(suggestions))
Run Code Online (Sandbox Code Playgroud)

我想过滤建议中包含产品原价的产品.有点像:

Product.objects.filter(price__in = self.suggestions)
Run Code Online (Sandbox Code Playgroud)

问题是我不能使用for循环查看每个产品的最小建议,因为你猜我也不能使用对象的自我,那么如何在查询中比较模型的两个字段?

mos*_*lix 10

from django.db.models import F
Product.objects.filter(price__in=F('suggestions'))
Run Code Online (Sandbox Code Playgroud)

  • 两个F怎么样?例如两个带注释的字段? (2认同)