Django ссылка на несколько изображений в шаблоне

Здравствуйте, я позволяю пользователю загружать несколько изображений для каждого проекта, но до сих пор изображения не отображаются. В projects.html должны отображаться все проекты, название и описание работают до сих пор. Но главное изображение не отображается. В single-project все изображения должны отображаться. Что мне нужно изменить в моем models.py? Спасибо заранее

models.py

class Project(models.Model):
    title = models.CharField(max_length=200)
    describtion = models.TextField(null=True, blank=True)
    id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)

class ProjectImage(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    featured_images = models.FileField()

forms.py

class ProjectForm(ModelForm):
    featured_images = forms.ImageField(widget=ClearableFileInput(attrs={'multiple':True}))
    class Meta:
        model = Project
        fields = ['title', 'describtion', 'featured_images']

views.py

def createProject(request):
    form = ProjectForm()

    if request.method == 'POST':
        form = ProjectForm(request.POST)
        images = request.FILES.getlist('image')
        if form.is_valid():
            project = form.save()
            for i in images:
                ProjectImage(project=project, image=i).save()

    context = {'form':form}
    return render(request, 'projects/project_form.html', context)

def projects(request):
    projects = Project.objects.all()
    context = {"projects":projects}
    return render(request, 'projects/projects.html', context)

def project(request, pk):
    projectObj = Project.objects.get(id=pk)
    return render(request, 'projects/single-project.html', {'project':projectObj})

projects.html

 {% for project in projects %}
          <div class="column">
            <div class="card project">
              <a href="{% url 'project' project.id %}" class="project">
                <img class="project__thumbnail" src="{{project.featured_images.url}}" alt="project thumbnail" />
                <div class="card__body">
                  <h3 class="project__title">{{project.title}}</h3>
                  <h3 class="project__title">{{project.price}} €</h3>
                </div>
              </a>
            </div>
          </div>
{% endfor %}

single-project.html

<h3 class="project__title">{{project.title}}</h3>
<h3 class="project__title">{{project.price}} €</h3>
<h3 class="singleProject__subtitle">Infos zum Produkt</h3>
{{project.describtion}}

Чтобы получить доступ к изображениям проекта, необходимо использовать связанный менеджер в ваших шаблонах:

projects.html

{% for project in projects %}
          <div class="column">
            <div class="card project">
              <a href="{% url 'project' project.id %}" class="project">
                <img class="project__thumbnail" src="{{project.projectimage_set.all.0.featured_images.url}}" alt="project thumbnail" />
                <div class="card__body">
                  <h3 class="project__title">{{project.title}}</h3>
                  <h3 class="project__title">{{project.price}} €</h3>
                </div>
              </a>
            </div>
          </div>
{% endfor %}

Я предположил, что под "main-image" вы подразумеваете первое изображение проекта.

single-project.html

<h3 class="project__title">{{project.title}}</h3>
<h3 class="project__title">{{project.price}} €</h3>
<h3 class="singleProject__subtitle">Infos zum Produkt</h3>
{{project.describtion}}
{% for projectimage in project.projectimage_set.all %}
  <img src="{{projectimage.featured_images.url}}"/>
{% endfor %}

Чтобы избежать проблемы N+1 запроса, вы также можете изменить запрос в представлении:

views.py

def projects(request):
    projects = Project.objects.all().prefetch_related('projectimage_set')
    context = {"projects":projects}
    return render(request, 'projects/projects.html', context)
Вернуться на верх