Django 查询多个关系中的@property值
我需要查询多个关系中的某些字段。这是设置Django 查询多个关系中的@property值,django,methods,model,properties,Django,Methods,Model,Properties,我需要查询多个关系中的某些字段。这是设置 class Yacht(models.Model): name = models.CharField(max_length=50) multiplier = models.DecimalField(max_digits=5, decimal_places=3) def __str__(self): return self.name class Event(models.Model): name = m
class Yacht(models.Model):
name = models.CharField(max_length=50)
multiplier = models.DecimalField(max_digits=5, decimal_places=3)
def __str__(self):
return self.name
class Event(models.Model):
name = models.CharField(max_length=50)
yachts = models.ManyToManyField(Yacht, through='Result')
def __str__(self):
return self.name
class Result(models.Model):
yacht = models.ForeignKey(Yacht, on_delete=models.CASCADE)
event = models.ForeignKey(Event, on_delete=models.CASCADE)
result = models.FloatField()
@property
def result_adjusted(self):
# returns the adjusted result based on the yacht's multiplier
return self.result * self.yacht.multiplier
问题:如何查询给定事件中给定游艇的调整结果?不能查询属性,但可以将属性的逻辑引入查询并使用它 假设我们想要
Result
实例,其中Result\u adjusted
为6,那么我们将编写如下查询:
from django.db.models import ExpressionWrapper, F, FloatField
results = Result.objects.annotate(
result_adjusted_value=ExpressionWrapper(
F('result') * F('yacht__multiplier'),
output_field=FloatField()
)
).filter(result_adjusted_value=6)
参考资料:
(可替换为)
您将在何处插入此逻辑?在模型文件或视图中?@julienest这是一个查询,因此它当然应该位于视图中。此外,这是对已知结果的过滤。在大多数情况下,我需要通过游艇对给定的事件进行筛选。我最终打算在管理面板中将其用作表格行表单。是否有一种方法或技术可用于始终将调整后的结果作为对象的一部分添加?@julienaest您可以使用或指定模型管理员