【问题标题】:Updating Records with image field in Django?在 Django 中使用图像字段更新记录?
【发布时间】:2016-06-03 14:27:33
【问题描述】:

我有一个应用程序,我想在其中添加一些带有图像的字段。当我尝试添加记录时,它的工作正常,但是当我尝试编辑记录时,编辑表单不会自动填充其中的任何数据。我怎样才能在视图文件中编写一个函数来达到这个目的?我的模型是

from __future__ import unicode_literals

from django.db import models
from django.core.urlresolvers import reverse

class Server(models.Model):
    name = models.CharField(max_length=200)
ip = models.GenericIPAddressField()
order = models.IntegerField()
image = models.FileField(upload_to='pics/',default='download.jpg') 

def __unicode__(self):
    return self.name

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

我在视图文件中的更新功能是:-

 from django.shortcuts import render, redirect, get_object_or_404
 from django.forms import ModelForm
import django.forms
from django import forms
from servers.models import Server
 def server_update(request, pk,        template_name='servers/server_form.html'):
  server = get_object_or_404(Server, pk=pk)
   form = ServerForm(data=request.POST, files=request.FILES, instance=server)
  if form.is_valid():
    ser = Server()
    ser.name = form.cleaned_data["name"]
    ser.ip = form.cleaned_data["ip"]
    ser.order = form.cleaned_data["order"]
    ser.image = form.cleaned_data["image"]
    ser.save()
    return redirect('server_list')
return render(request, template_name, {'form':form})

这里 form = ServerForm(数据=request.POST,文件=request.FILES,实例=服务器) 我认为这条线会引起问题,对于没有图像的正常形式 表单 = ServerForm(数据=request.POST,实例=服务器) 这将用于在编辑文件中填充数据。但在这种图像记录编辑的情况下,它不起作用..

我的模板文件是:

  <form method="post" enctype="multipart/form-data">{% csrf_token %}
  {{ form.as_p }}
  <input type="submit" value="Submit" />
</form> 

【问题讨论】:

  • 你能发布你的表格吗,你用过表格或模型表格吗??

标签: python django django-forms django-templates django-views


【解决方案1】:

请像这样更新您的编辑视图:- 该行必须像这样更改- form = ServerForm(request.POST or None, request.FILES or None, instance=server)

def server_update(request, pk, template_name='servers/server_form.html'):
    server = get_object_or_404(Server, pk=pk)
    form = ServerForm(request.POST or None, request.FILES or None,  instance=server)
    if form.is_valid():
        edit = form.save(commit=False)
        edit.save()
        return redirect('server_list')
    return render(request, template_name, {'form':form})

【讨论】:

    【解决方案2】:

    您是否尝试过手动将数据作为字典发送?

    form = Form({'charfield': model.charfield, 'imagefield': model.image})
    

    这样你可以尝试一些其他的选择。大概你需要发送实际的文件数据,所以你最终会发送:model.image.read() 而不仅仅是 model.image

    【讨论】:

    • 它不工作......我是 Django 的新手......还有其他方法可以让我们将图像与其他数据一起保存吗?我发现的所有文档都没有解释这一点..请有人帮助我..
    • 我现在没有机会尝试,所以暂时无法提供更多有用的信息。不过我明天可以试试。我可以在我的项目中的某个地方使用它。
    • 这是每个人的应用程序的共同要求吗?我在任何文档中都没有找到与此相关的任何内容?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    相关资源
    最近更新 更多