【问题标题】:Django Image field doesn't update imageDjango Image 字段不更新图像
【发布时间】:2019-11-07 20:06:05
【问题描述】:

我最近遇到一个问题,我的 django 应用程序中的 django 图像字段在按下“发布”后没有更新图像。在管理面板中一切正常。也许我错过了什么……让我知道。

models.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    categories = models.ManyToManyField('Category', related_name='posts')
    image = models.ImageField(upload_to='images', default="images/None/no-img.jpg")



    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk})


class Category(models.Model):
    name = models.CharField(max_length=20

)

views.py

from django.shortcuts import render, get_object_or_404
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from .models import Post
from django.contrib.auth.models import User
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView


def home(request):
    content = {
        'posts': Post.objects.all()
    }

    return render(request, 'blog/home.html', content)

def blog_category(request, category):
    posts = Post.objects.filter(categories__name__contains=category).order_by('-date_posted')
    content = {
        'category': category,
        'posts': posts
    }
    return render(request, 'blog/blog_category.html', content) #<--(didn't add content block) bug found 05.11.19

def upload_pic(request):
    if request.method == 'POST':
        form = ImageUploadForm(request.POST, request.FILES)
        if form.is_valid():
            m = ExampleModel.objects.get(pk=course_id)
            m.model_pic = form.cleaned_data['image']
            m.save()
            return HttpResponse('image upload success')
    return HttpResponseForbidden('allowed only via POST')

...

class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    fields = ['title', 'content', 'categories', 'image']

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)


class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Post
    fields = ['title', 'content', 'categories', 'image']

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

我刚刚在我的网络应用程序中添加了 CategoryImage 部分,Category 部分工作正常,但图像字段只是发布default,即使我选择的是当前图像。在管理领域它运作良好,所以我决定向社区询问这个烦人的问题。

【问题讨论】:

    标签: django django-models django-forms django-views django-imagekit


    【解决方案1】:

    确保模板中的表单具有enctype set correctly:

    请注意,request.FILES 仅在请求方法为 POST 且发布请求的具有属性 enctype="multipart/form-data" 时才会包含数据。否则,request.FILES 将为空。

    【讨论】:

      猜你喜欢
      • 2016-02-18
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      • 2020-03-06
      • 1970-01-01
      • 2011-07-01
      相关资源
      最近更新 更多