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

Вернуться на верх