首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django -上传带有附加信息的图像

Django -上传带有附加信息的图像
EN

Stack Overflow用户
提问于 2020-03-28 19:01:56
回答 2查看 44关注 0票数 0

假设我有一个博客网站。每个博客都由图片组成。因此,我想根据图片所属的博客对图片进行排序。但是上传的时候,如何自动传递图片的博客id呢?

我的模型是这样的:

代码语言:javascript
运行
复制
class Blog(models.Model):
    name = models.CharField()
    blog = models.CharField()

class Photo(models.Model):
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
    file = models.FileField(upload_to=get_upload_path)

我的forms.py看起来像这样:

代码语言:javascript
运行
复制
class PhotoForm(forms.ModelForm):
    class Meta:
        model = Photo
        fields = ('file', 'blog')

你看,在田野里有“博客”。我如何在那里传递博客id呢?

目前,我上传页面的html是这样的:

代码语言:javascript
运行
复制
<div style="margin-bottom: 20px;">
    <button type="button" class="btn btn-primary js-upload-photos">
     <input id="fileupload" type="file" name="file" multiple
                   style="display: none;"
                   data-url="{% url 'blog' blog.id %}"
                   data-form-data='{"csrfmiddlewaretoken": "{{ csrf_token }}"}'>
</div>

实际上,这种上传图片的方式是从this great article by Vitor Freitas获取的

现在,我想通过views.py将博客id传递给模板,并提供上下文。但我如何保存它,并将其与我上传的图像一起传递呢?

views.py如下所示:

代码语言:javascript
运行
复制
class BlogDetailView(View):

    def get(self, request,**kwargs):
        page = get_object_or_404(Page, pk=self.kwargs['pk'])
        context = {'page':page}

        return render(self.request, 'blog.html', context=context)


    def post(self, request, **kwargs):
        form = PhotoForm(self.request.POST, self.request.FILES)
        if form.is_valid():
            photo = form.save()
            data = {'is_valid': True, 'name': photo.file.name, 'url': photo.file.url}
        else:
            data = {'is_valid': False}
        return JsonResponse(data)

那么如何在上传时将图片与博客关联起来呢?

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-31 16:42:24

好的,所以我这样解决了我的问题:

我保留了表单的原样。在html中,我没有为博客id做任何事情。相反,在views.py中,我像这样复制了post请求:

代码语言:javascript
运行
复制
    stuff = request.POST.copy()
    stuff['blog'] = blog.id

然后,我用这样的“东西”创建了表单:form = PhotoForm(stuff, self.request.FILES)

然后做了验证。

这样做,我的问题就解决了,因为我现在通过博客id和我的照片。

票数 0
EN

Stack Overflow用户

发布于 2020-03-28 23:44:53

为什么不像下面这样在表单中传入文件:

代码语言:javascript
运行
复制
if form.is_valid():
    photo = form.save(commit=False)
    photo.file = request.FILES['file']
    photo.save()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60900274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档