Как запустить функцию модели с помощью DTL?
Я довольно новичок в django и пытаюсь сделать следующее:
Я делаю веб-приложение для заказа еды для близлежащего бизнеса. Я пытаюсь добавить все калории в блюдо.
У меня есть модель "Consumable", которая представляет собой различные продукты питания и напитки. Вот код для модели "Consumable":
class Consumable(models.Model):
name = models.CharField(max_length=80, unique=True)
category = models.ForeignKey(FoodCategory, null=True, on_delete=models.SET_NULL)
price= models.FloatField(default=0.00)
calories = models.IntegerField(blank=False)
image = models.ImageField(upload_to="images/Food/")
description = RichTextField(blank=True, max_length=500)
restaurant = models.ForeignKey(Place, on_delete=models.CASCADE)
added = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
Затем, у меня есть модель под названием "Meal", которая имеет следующий код:
class Meal(models.Model):
name = models.CharField(max_length=100)
image = models.ImageField(upload_to='images/photos/meals')
consumables = models.ManyToManyField(Consumable, related_name="consumable")
restaurant = models.ForeignKey(Place, on_delete=models.CASCADE)
price = models.FloatField()
def add_cals(meal_consumables):
total_calories = 0
for x in meal_consumables.values():
global total_calories += float(x.calories)
return total_calories
Я пытаюсь вызвать функцию этой модели, add_cals
из моего HTML файла, используя DTL (Django Template Language).
Например, если у вас есть модель, хранящаяся с переменной x в вашем представлении, и она находится в контекстном словаре представления, вы можете просто вызвать модель, используя, например, <p>{{x}}</p>
. А если у модели есть переменная x1
, вы могли бы вызвать ее как <p>{{x.x1}}</p>
, и это прекрасно работает. Однако, если модель x из моего примера имеет функцию
add_x(x):
return x
тогда это почему-то не будет работать, когда вы называете это как <p>{{x.add_x(1)}}</p>
. Может ли какой-нибудь мудрый человек в этом мире быть настолько скромным, чтобы поделиться своими знаниями со мной, чтобы помочь мне?
Спасибо всем, кто пробует.