在 Django 中使用图像字段更新记录?
Updating Records with image field in Django?
我有一个应用程序,我想在其中添加一些带有图像的字段。当我尝试添加记录时它工作正常但是当我尝试编辑记录时,编辑表单不会自动填充其中的任何数据。我如何在视图文件中编写一个函数来达到目的?我的模特是
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})
这里
表单 = 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>
您是否尝试过将数据作为字典手动发送?
form = Form({'charfield': model.charfield, 'imagefield': model.image})
这样你可以尝试一些其他的选择。大概你需要发送实际的文件数据,所以你最终会发送: model.image.read() 而不仅仅是 model.image
请像这样更新您的编辑视图:- 该行必须像这样更改-
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})
我有一个应用程序,我想在其中添加一些带有图像的字段。当我尝试添加记录时它工作正常但是当我尝试编辑记录时,编辑表单不会自动填充其中的任何数据。我如何在视图文件中编写一个函数来达到目的?我的模特是
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})
这里 表单 = 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>
您是否尝试过将数据作为字典手动发送?
form = Form({'charfield': model.charfield, 'imagefield': model.image})
这样你可以尝试一些其他的选择。大概你需要发送实际的文件数据,所以你最终会发送: model.image.read() 而不仅仅是 model.image
请像这样更新您的编辑视图:- 该行必须像这样更改- 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})