请问如何使用模型@property 方法过滤视图中的查询集。
class TransactionData(models.Model):
Nozzle_address = models.CharField(max_length=255)
Device = models.ForeignKey(Devices, on_delete=models.CASCADE)
Site = models.ForeignKey(Sites, on_delete=models.CASCADE, enter code hererelated_name='transaction_data')
Pump_mac_address = models.CharField(max_length=255)
@property
def product_name(self):
try:
return f'{(Nozzle.objects.filter(Pump__Device__Device_unique_address=self.Pump_mac_address,Nozzle_address=self.Nozzle_address)).Product.Name}'
except :
pass
基本上我希望能够在这样的视图中编写查询:
filters_product = models.TransactionData.objects.filter(Site=Site_id, product_name='kero')
但是 django 不支持这个。我想我需要编写一个自定义管理器,然后我可以像这样查询
filters_product = models.TransactionData.objects.filter(Site=Site_id).product_name('Key')
问题是在属性方法product_name中使用了另一个模型,如Nozzle
请问我怎样才能完成这项工作......我知道我需要使用自定义管理器或查询集来完成这项工作,但不能只是弄清楚......我非常感谢你的帮助。谢谢
@Amin 我按照您的建议使用了注释,但由于self引用了模型实例因此未定义,因此不起作用...感谢任何帮助。IE
models.TransactionData.objects.annotate(product_name=(models.Nozzle.objects.filter(Pump__Device__Device_unique_address=self.Pump_mac_address,Nozzle_address=self.Nozzle_address)).Product.Name)