Django: вложенный цикл forloop не отображается
У меня есть модель "Домашние задания", и у меня есть модель "Оценки", и я пытаюсь добавить оценку и показать ее в каждом домашнем задании.
Все работает отлично, но, видимо, я не могу сохранить или даже заставить форму grades_form отображаться внутри цикла в цикле.
Models.py
class Hw_upload(models.Model):
title = models.CharField(blank=True, max_length=255, null=True)
description = models.TextField(blank=True, max_length=255, null=True)
document = models.FileField(blank=True, upload_to='documents/', null=True)
creation_date = models.DateTimeField(default=timezone.now)
hw_author = models.ForeignKey(User, on_delete=models.PROTECT, related_name="hw_author")
activity = models.ForeignKey(Activity, on_delete=models.CASCADE, related_name="hw_uploads", null=True)
class Grades(models.Model):
grade = models.PositiveIntegerField(validators=[MaxValueValidator(100)], blank=True, null=True)
hw_upload = models.ForeignKey(Hw_upload, on_delete=models.CASCADE, related_name="hw_grades", null=True)
Forms.py
class Hw_gradeForm(ModelForm):
class Meta:
model = Grades
fields = ['grade']
widgets = {
'grade': forms.NumberInput(attrs={'class': 'form-control', 'placeholder': '0-100'})
}
Views.py
def activity(request, id):
if not request.user.is_authenticated:
return render(request, "auctions/login.html")
activity = Activity.objects.get(id=id)
try:
hw_upload = Hw_upload.objects.get(id=id)
except Hw_upload.DoesNotExist:
hw_upload = None
try:
grades = Grades.objects.get(id=id)
except Grades.DoesNotExist:
grades = None
if request.method == 'POST':
form = Hw_uploadForm(request.POST, request.FILES or None)
if form.is_valid():
upload_hw = form.save(commit=False)
upload_hw.hw_author = request.user
upload_hw.activity = Activity.objects.get(id=id)
upload_hw.save()
if request.method == 'POST':
grade_form = Hw_gradeForm(request.POST, request.FILES or None)
if grade_form.is_valid():
grade_hw = grade_form.save(commit=False)
grade_hw.hw_upload = Hw_upload.objects.get(id=id)
grade_hw.save()
url = reverse('activity', kwargs={'id': id})
return HttpResponseRedirect(url)
return render(request, "auctions/activity.html", {
"activity": activity,
'hw_upload': hw_upload,
'grades': grades,
'grade_form': Hw_gradeForm(),
"form": Hw_uploadForm(),
"title": "Send reply for activity:"
})
urls.py
path("auction/course/module/activity/<str:id>", views.activity, name="activity"),
template.html
<!-- Uploads -->
<h5 style="padding: 5px;"><span class="badge badge-secondary badge-pill mx-1">{{ activity.hw_uploads.count }}</span>Uploads:</h5>
<div>
{% for hw_upload in activity.hw_uploads.all %}
<div style="border:solid 1px lightgray; padding: 5px;">
<h5 style="padding-top: 5px; padding-left: 5px;">{{ hw_upload.hw_author }}</h5>
{% if hw_upload.title %}
<h5 style="padding-top: 5px; padding-left: 10px;">{{ hw_upload.title }}</h5>
{% endif %}
<ul>
{% if hw_upload.description %}
<h6 style="padding-top: 5px;">{{ hw_upload.description }}</h6>
{% endif %}
<!-- File -->
{% if hw_upload.document %}
<a href="{{ hw_upload.document.url }}" target="_blank" id="img">{{ hw_upload.document }}</a>
{% else %}
No files uplodaded
{% endif %}
</ul>
</div>
</div>
{% endfor %}
<!-- Uploads -->
{% for hw_upload in activity.hw_uploads.all %}
<div class="row">
<div class="column" style="background: linear-gradient(90deg, white 0%, rgb(111, 255, 238) 100%);">
by <span style="font-weight: bold;">{{ hw_upload.hw_author }}</span> on {{ hw_upload.creation_date }}
<br>
</div>
<div class="column" style="background: lightblue;
background: linear-gradient(90deg, rgb(111, 255, 238) 0%, rgb(0, 255, 225) 100%);">
<h2></h2>
<p>
<h2>{{ hw_upload.title }}</h2>
<br>
<h5>{{ hw_upload.description }}</h5>
<!-- Image -->
{% if hw_upload.document %}
<img src="{{ hw_upload.document.url }}" id="img">
{% else %}
No files uploaded
{% endif %}
</p>
</div>
<div class="column" style="border-top-right-radius: 10px; border-bottom-right-radius: 10px; background: lightblue;
background: linear-gradient(90deg, rgb(111, 255, 238) 0%, rgb(0, 255, 225) 100%); padding: 5px;">
<h2></h2>
<p>
<!-- Grade activity -->
{% for grades in hw_upload.hw_grades.all %}
<form>
<h5>{{ grade_form }}</h5>
<input class="button" type=submit value="Send">
</form>
<h5>Grade: {{ grades.grade }}</h5>
{% endfor %}
</p>
</div>
</div>
{% endfor %}
Заранее большое спасибо за вашу мудрость!