Подтвердить что ты не робот

Передача аргументов методам модели в шаблонах Django

Я пытаюсь получить всех клиентов из определенного бизнеса, но есть метод класса в модели Customer, чтобы получить некоторую информацию на основе того же бизнеса... Позвольте мне объяснить это с помощью кода...

class Business(models.Model):
    ...
    customers = models.ManyToManyField(Customer, blank=True, null=True)

class Customer(models.Model):
    ...
    def get_something(self, obj_business)
        ...

Хорошо теперь в моих представлениях я получаю всех клиентов из указанного бизнеса следующим образом:

obj_customers = obj_business.customers.all()

Затем я пытаюсь напечатать это в своем шаблоне:

{% for obj_customer in obj_customers %}
    {{ obj_customer.get_something ....... }}

Но да, нет способа передать аргументы... Я хотел бы знать, есть ли что-то, что мне не хватает...

Интересно, есть ли другое решение вместо создания тега шаблона... потому что это ManyToManyField, если поле customers было просто ForeignKey, не нужно передавать аргумент этому методу..

4b9b3361

Ответ 1

Вы можете создать простой тег шаблона для вызова любого метода с любыми аргументами:

from django import template

register = template.Library()

@register.simple_tag
def call_method(obj, method_name, *args):
    method = getattr(obj, method_name)
    return method(*args)

И затем в вашем шаблоне:

{% call_method obj_customer 'get_something' obj_business %}

Но, конечно, ярлык специализированного тега шаблона более безопасен: -)

@register.simple_tag
def get_something(customer, business):
    return customer.get_something(business)

Шаблон:

{% get_something obj_customer obj_business %}