Шаблон - Родительский детальный просмотр с дочерним списком для цикла
Я пробовал решения, которые были предложены другим людям в похожих ситуациях, однако почти все вопросы касаются необычных сценариев, и я не смог адаптировать их к своей ситуации.
Мне нужен цикл for для информации о дочерних элементах в родительском DetailView
Модели
class Projects(models.Model):
fk_user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.BooleanField(default=False)
class Projects_items(models.Model):
itemName = models.BooleanField(default=False)
fk_project = models.ForeignKey(Projects,on_delete=models.CASCADE, related_name="item")
value = models.FloatField()
Виды
class projects(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = Projects
fields = [
'name',
]
template_name = 'games/project_details.html'
context_object_name = 'projects'
def form_valid(self, form):
form.instance.fk_user = self.request.user
form.save()
# return super().form_valid(form)
return HttpResponseRedirect(self.request.path_info)
def test_func(self):
post = self.get_object()
if self.request.user == post.fk_user:
return True
return False
Шаблон - projects_details
{% extends './underlay.html' %}
{% load static %}
{% load crispy_forms_tags %}
<link rel="stylesheet" type="text/css" href="{% static 'details.css' %}">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins">
{% block content %}
<H2>LIST OF ITEMS BELONGING TO THIS PROJECT</H2>
?
SOMETHING LIKE:
{% for projects.item in projects %}
{{ projects.item.itemName }} - {{ projects.item.value }}
{% endfor %}
THIS GAVE AN ERROR OF 'PROJECTS' OBJECT NOT ITERABLE
Во-первых, измените названия классов на единственное число, как Project
и Projects_item
, потому что это сбивает с толку.
Во-вторых, измените related_name
из ForeignKey
на related_name="items"
.
Затем в шаблоне вы можете получить все связанные Projects_items
следующим образом:
{% for item in project.items.all %}
{{ item.itemName }} - {{ item.value }}
{% endfor %}