Django: Как фильтровать свойства модели в представлениях
Пожалуйста, как я могу фильтровать набор запросов в представлениях, используя метод @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
В основном я хочу иметь возможность писать запрос в представлениях следующим образом:
фильтрованный_продукт = models.TransactionData.objects.filter(Site=Site_id, product_name='kero')
Но django не поддерживает это. Я думаю, что мне нужно будет написать пользовательский менеджер, в котором я смогу делать запросы следующим образом
фильтрованный_продукт = models.TransactionData.objects.filter(Site=Site_id).product_name('Key')
Проблема в том, что в методе свойства product_name используется другая модель Nozzle
Пожалуйста, как я могу это сделать... Я знаю, что мне нужно использовать либо пользовательский менеджер, либо queryset, чтобы заставить это работать, но я не могу просто понять это... Я очень ценю вашу помощь. Спасибо
Вам следует использовать annotate:
models.TransactionData.objects.annotate(product_name=YOUR_ANNOTATION)
После этого вы можете получить доступ к product_name
как к полю и фильтровать по нему
Документы в: https://docs.djangoproject.com/en/3.2/ref/models/querysets/#annotate