Как отобразить данные относительного внешнего ключа в html-странице Django?
Я видел может быть ответ, но я не знаю, почему на моей странице он не работает может кто-нибудь помочь мне найти ошибку.
model
class SchoollModel(models.Model):
title = models.CharField(max_length=60 )
image = models.FileField(upload_to = 'static/img' ,help_text='cover img')
desc = models.TextField(null=True, blank=False)
def __str__(self):
return self.title
class SchoolImage(models.Model):
post = models.ForeignKey(SchoollModel, default=None, on_delete=models.CASCADE)
images = models.FileField(upload_to = 'static/img')
def __str__(self):
return self.post.title
views.py
после импорта всех
def school_view(request , id):
school_model =SchoollModel.objects.all().filter(id=id)[0]
school_image = SchoolImage.objects.all()
return render(request,'school.html' ,{'school_model':school_model,'school_image':school_image})
school.html
я хочу отобразить несколько изображений школы. я сделал инлайн в админке. как мы можем получить все изображения, которые являются иностранными ключами для SchoolModel
{% for sch in SchoollModel.SchoolImage_set.all %}
<img style = 'max-height:14rem ;max-width:14rem;' src="{{sch.images.url}}" alt="image">
{% endfor %}
Самый простой способ получить все отношения внешнего ключа - это присвоить ему related_name
и использовать его.
class SchoollModel(models.Model):
...
class SchoolImage(models.Model):
post = models.ForeignKey(SchoollModel, default=None, related_name='images', on_delete=models.CASCADE)
images = models.FileField(upload_to = 'static/img')
def __str__(self):
return self.post.title
Затем вы можете получить все изображения, связанные с объектом SchoollModel, используя images
связанное имя следующим образом:
>>> schooll = SchoollModel.objects.first()
>>> images = schooll.images.all()
Итак, в вашем представлении вы можете передать только объект SchoollModel в контекст шаблона:
from django.shortcuts import get_object_or_404
def school_view(request , id):
#school_model = SchoollModel.objects.all().filter(id=id)[0]
school_model = get_object_or_404(SchoollModel, pk=id) #this is safer than your previous code
return render(request, 'school.html', {'school_model':school_model})
А в вашем шаблоне:
{% for image in school_model.images.all %}
<img style = 'max-height:14rem ;max-width:14rem;' src="{{image.images.url}}" alt="image">
{% endfor %}