Желаемый результат: Я хочу динамически создавать и выводить данные из поля "один ко многим" в шаблон в 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>
Надеюсь, это немного прояснило ситуацию.