使用多重上传功能将多个图像上传到Django admin中的模型。无法在html页面上显示图像

时间:2020-05-12 07:29:00

标签: python django

下面是我的模型,表格,管理和views.py文件。

我正在尝试在管理面板上将多个图像添加到事件模型,并尝试在event-detail.html页面中显示它们。以下是我的event-detail.html页面上的代码块。

<div class="row mt-4">
          {% for image in companyevent.eventphotos_set.all %}
       <div class="col-md-4">
        <a href=""><img src="{{image.image.url}}" class="img-border" alt=""></a>
       </div>
        {% endfor %}

Models.py

class CompanyEvent(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100, blank=True, null=True,unique_for_date='published_date',
                            help_text="SEO friendly post title (automatically filled)")
    event_cover= models.ImageField(upload_to='EventImages', blank=True, help_text="Add Cover Image to the Event", null=True)
    categories = models.ManyToManyField(Categories, blank=False, default='General', help_text="Category of the Event")
    description= RichTextUploadingField(help_text="content of the post goes here", blank=True, null=True)
    created_date = models.DateTimeField(auto_now_add=True, help_text="Date on which the event has been Created")
    tags = models.ManyToManyField(Tags)
    status = models.CharField(choices=STATUS, default='DRAFT', max_length=10,
                              help_text="to segregate events based on status")
    published_date = models.DateTimeField(auto_now_add=True, help_text="Do you want to publish the event")
    updated_date = models.DateTimeField(auto_now=True, help_text="Any changes to the Event!")
    objects = EventQuerySet.as_manager()

    def __str__(self):
        return self.title

    def __unicode__(self):
        return self.title

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super(CompanyEvent, self).save(*args, **kwargs)
    class Meta:
        ordering= ['-published_date']


    def get_all_content(self):
        return ''.join(map(lambda x: '%s' % str(x), (self.title, self.description)))

    def get_absolute_url(self):
        # return '/' + self.slug + '/'
        return reverse('company_events:event_detail', kwargs={
            'slug': self.slug
        })
    def is_draft(self):
        return self.status == "draft"

    def datepublished(self):
        return self.published_date.strftime('%B %d %Y')
        # return self.published_date.date()
    def get_categories(self):
        ret=''
        for cat in self.categories.all():
            ret= ret+ cat.cat_name + ', '
        return ret[:-1]

    def get_tags(self):
        ret=''
        for tag in self.tags.all():
            ret= ret+ tag.tag_name + ', '
        return ret[:-1]
    def get_image_filename(instance, filename):
        title = instance.title
        slug = slugify(title)
        return "event_images/%s-%s" % (slug, filename)


class EventPhoto(models.Model):
    event = models.ForeignKey(
        CompanyEvent, on_delete=models.CASCADE, related_name="photos"
    )
    photo = models.ImageField(upload_to='EventImages', verbose_name='Image')

Forms.py

class EventAdminForm(forms.ModelForm):
    class Meta:
        model = CompanyEvent
        fields = (
            "title",
            "slug",
            "event_cover",
            "description",
            "categories",
            "tags",
            "status",
        )
    photos = forms.FileField(
        widget=forms.ClearableFileInput(attrs={"multiple": True}),
        label=_("Event Photos"),
        required=False,
    )

    def clean_photos(self):
        """Make sure only images can be uploaded."""
        for upload in self.files.getlist("photos"):
            validate_image_file_extension(upload)

    def save_photos(self, event):
        """Process each uploaded image."""
        for upload in self.files.getlist("photos"):
            photo = EventPhoto(event=event, photo=upload)
            photo.save()

admin.py

class EventAdmin(admin.ModelAdmin):
    form = EventAdminForm
    list_display = ('title', 'slug', 'status', 'published_date',)
    list_filter = ('status',)
    # list_display = ('title', 'slug', 'status', 'published_date','content')
    search_fields = ['title', 'content']
    prepopulated_fields = {'slug': ('title',)}

    inlines = [ShowPhotoInline]
     def save_related(self, request, form, formsets, change):
        super().save_related(request, form, formsets, change)
        form.save_photos(form.instance)

views.py

class EventPageView(generic.ListView):
    queryset = CompanyEvent.objects.published()
    template_name = 'site/event-main.html'
    paginate_by = 5
    def get_context_data(self, **kwargs):
        context_data = super(EventPageView, self).get_context_data(**kwargs)
        context_data['page_range'] = GenericPaginator(
            self.queryset,
            self.paginate_by,
            self.request.GET.get('page')
        ).get_page_range()
        context_data['categories'] = Categories.objects.all()
        context_data['tags'] = Tags.objects.all()
        return context_data


class EventDetailView(generic.DetailView):
    model = CompanyEvent
    template_name = 'site/event-detail.html'
    def get_context_data(self, **kwargs):
        context_data = super(EventDetailView, self).get_context_data(**kwargs)

        related_events = CompanyEvent.objects.filter(
            tags__in=list(self.object.tags.all())
        ).exclude(id=self.object.id).distinct()
        context_data['related_events'] = related_events[:3]
        # limit for post
        return context_data

我应该更改视图中的任何内容以获取所有图像吗?

0 个答案:

没有答案