Желаемый результат: Я хочу динамически создавать и выводить данные из поля "один ко многим" в шаблон в Django

У меня есть две модели с отношениями Один ко многим. Модели являются родительской и дочерней соответственно. Мне удалось динамически выводить данные из родительской модели, но теперь я хочу иметь возможность поместить ссылку на каждую родительскую запись, чтобы при нажатии на нее создавалась дочерняя запись и выводилась информация о ребенке в соответствующую родительскую модель.

#Модели

class Parent(models.Model):
    surname = models.CharField(max_length=150, null=False, blank=False)
    first_name = models.CharField(max_length=150, null=False, blank=False)

class Child(models.Model):
    parent = models.ForeignKey(Parent, null=True, blank=True, on_delete=SET_NULL)
    first_name = models.CharField(max_length=50, null=False, blank=False)
    last_name = models.CharField(max_length=50, null=False, blank=False)

views.py

def display(request, pk):
    parents = Parent.objects.get(id=pk)
    child = parents.child_set.all()
    context = {'parents':parents, 'child':child}
return render(request, 'reg/info_page.html', context)  

Я попытался реализовать обратную связь, но когда я пытаюсь отобразить информацию о ребенке, она появляется пустой.

div class="col-md-4 col-sm-4 text-center">
<p class="text-purple">Child Name</p>
<h1>{{child.first_name}}</h1> </div>

Посмотрите внимательнее на метод QuerySet'а all(). Он возвращает копию экземпляра QuerySet, поэтому то, что вы получаете, по сути, является списком как объектом.

Когда вы пишете child = parents.child_set.all() и передаете child рендеру шаблона, вы фактически передаете список дочерних объектов. Чтобы правильно отобразить их в шаблоне, вам нужно перебрать этот список, который может выглядеть примерно так:

<ul>
{% for a_child in child %}
    <li>{{ a_child.first_name }}</li>
{% endfor %}
</ul>

Надеюсь, это немного прояснило ситуацию.

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