Получение связанных моделей в шаблоне
У меня есть две модели. Я пытаюсь получить qs заданий для заданного обзора в рамках моего шаблона
Models.py
class Job(models.Model):
employee = models.ForeignKey(Employee, on_delete=models.CASCADE, null=True, blank=True)
cart = models.ForeignKey(Cart, related_name="cartmodel", on_delete=models.CASCADE, null=True, blank=True)
class Review(models.Model)
cart = models.ForeignKey(Cart, on_delete=models.CASCADE, default=None)
views.py
reviews = Review.objects.all()
шаблон
{% for review in reviews %}
{% for i in review.cart.job_set.all %}
{{i.employee}}
{% endfor %}
{% endfor %}
Код в моем шаблоне не работает. Есть мысли, как правильно построить этот набор в моем шаблоне?
Спасибо!
Поскольку вы указали как related_name='cartmodel', это означает, что вы обращаетесь к связанным Job с помощью review.cart.cartmodel.all, но related_name='cartmodel', вероятно, ошибочное название: это название ForeignKey в обратном направлении, поэтому вы можете переименовать его в:
class Job(models.Model):
employee = models.ForeignKey(
Employee,
on_delete=models.CASCADE,
null=True,
blank=True
)
cart = models.ForeignKey(
Cart,
related_name='jobs',
on_delete=models.CASCADE,
null=True,
blank=True
)
тогда вы можете изобразить это следующим образом:
{% for review in reviews %}
{% for i in review.cart.jobs.all %}
{{ i.employee }}
{% endfor %}
{% endfor %}
Также странно, что внешние ключи (оба) NULLable, это означает, что i.employee может быть None, и таким образом не указывать на реального сотрудника.
Вы можете оптимизировать выполнение запросов путем предварительной выборки cart и заданий с:
reviews = Review.objects.select_related('cart').prefetch_related('cart__jobs')