Как отобразить данные относительного внешнего ключа в 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 %}
Вернуться на верх