Получить объект по ForeignKey во втором уровне вложенности

models.py

class Product(models.Model)
 name = models.CharField()

class User(models.Model)
 name = models.CharField()

class List(models.Model)
 user = models.ForeignKey(User)

class Item(models.Model)
 name = models.CharField()
 list = models.ForeignKey(List)
 user = models.ForeignKey(User)
 product = models.ForeignKey(Product)

views.py

class ListView(View)
  def get(self, request, pk)
    list = List.objects.get(id=pk)
    return render(request, "list.html", {"list" : list})

list.html

{% for item in list.item_set.all %}
  {{ item.name }}
  {{ item.user.name }} - ??
  {{ item.product.name }} - ??
{% endfor %}

Как получить user.name и product.name?

Пробовал:

  1. {% item.user_set.first.name %} - не работает

  2. {% for user in item.user_set.all %}{{ user.name }}{% endfor %} - не работает

  3. Метод модели

    def get_user(self): 
        self.user_ser.get() #не работает
    

Перерыл весь google и en.stackoverflow не могу найти ответ(


Ответы (1 шт):

Автор решения: Vadim.Sharoikin
class ListView(View)
  def get(self, request, pk)
    list = User.objects.get(id=pk) #изменил модель
    return render(request, "list.html", {"list" : list})

К связанным моделям обращаются через ключевое слово _set читайте официальную документацию

{% for a in list %}
    <h1>{{a.name}}</h1>
        {% for b in a.list_set.all %}
            <ul>{{b.user}}</ul>
                    {% for c in b.item_set.all %}
                        <li>{{c.product}}</li>
                    {% endfor %}
        {% endfor %}
 {% endfor %}
→ Ссылка