我正在尝试从输入 ImageFile 中获取图像以显示在模板中,并将该 ImageFile 保存到模型 ImageField。
下面的代码会报错:
upload_img_temp.write(uploaded_image)
TypeError: a bytes-like object is required, not 'str'
表单
class UploadImageForm(forms.ModelForm):
class Meta:
model = Image
fields = ['image']
查看
def uploadImageView(request):
form = UploadImageForm(request.POST or None, request.FILES or None)
if request.method == 'POST':
if form.is_valid:
request.session['image'] = request.POST['image']
return redirect('image:create')
def imageCreateView(request):
uploaded_image = request.session.get('image')
upload_img_temp = NamedTemporaryFile()
upload_img_temp.write(uploaded_image)
upload_img_temp.flush()
form_create = ImageModelCreateForm(request.POST or None, request.FILES or None,)
if form_create.is_valid():
instance = form_create.save(commit=False)
instance.image = upload_img_temp
模板
<img class="image" src="{{ upload_img_temp }}">
<form method="POST" action="">
{% csrf_token %}
<input type="submit"></input>
{{ form }}
</form>
型号
def upload_location(instance, filename):
filebase, extension = filename.split(".")
return "%s/%s.%s" %('picx', uuid.uuid4(), extension)
class Image(models.Model):
image = models.ImageField(
upload_to=upload_location,
null=False,
blank=False,
)
最佳答案
所以你有多个问题。
-
<form method="POST" action="" enctype='multipart/form-data' >
您需要添加 enctype='multipart/form-data'
在form
否则将不接受任何文件。
- 要显示图像,您需要像
<img class="image" src="{{Image.image.url}}">
这样的东西请注意,“图像”必须是您在 views.py 上下文部分为此模板定义的有效参数。它是对您的模型的引用,第二个“图像”关键字是指您的模型属性“图像”。.url
是必需的。 将您的 views.py 更改为类似的内容:
def uploadG(request): form = PostForm(request.POST or None, request.FILES or None) if form.is_valid(): print ("form was valid TEST") #controll your console and check if that statement appears when you click upload. instance = form.save(commit = False) .... instance.save() messages.success(request, 'You uploaded it')
希望对您有所帮助。如果没有留下评论
关于python - 如何从 django 表单 ImageField 输入中获取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45076642/