大家好,我也是Django和Python的新手。
使用Django 1.8版 和python ver 2.7.6
想要将表单的字段更新到DB中, 所以想同时发送所有这些。 现在问题在于它只上传图像 进入服务器更新数据库的路径.. 哪个好
然而,所有其他字段都不是"文件"保持忽略...因此不会插入到数据库中,也不会在视图方法中作为参数接收。
不得不提一下,例如,我只是添加了描述字段。
这是结构。 基于:
模型, 视图, 形式, HTML
型号:
from django.db import models
from decimal import Decimal
from django.utils.safestring import mark_safe
# Create your models here.
class BlogPost(models.Model):
title = models.CharField(max_length=150)
body = models.TextField()
time = models.DateTimeField()
class ProfileImage(models.Model):
image = models.FileField(upload_to='profile/%Y/%m/%d')
description = models.CharField(max_length=150)
表单:
from django import forms
class ProfileImageForm(forms.Form):
image = forms.FileField(label='Select a profile Image')
description = forms.CharField(required=True)
查看:
class ProfileImageView(FormView):
template_name = 'upload.html'
form_class = ProfileImageForm
def form_valid(self,form):
profile_image = ProfileImage(
image=self.get_form_kwargs().get('files')['image']), description=self.get_form_kwargs().get('files')['description'])
if profile_image.is_valid():
profile_image.save()
#self.id = profile_image.id
return HttpResponseRedirect(self.get_success_url())
def get_success_url(self):
return reverse('profile_image', kwargs={'pk': self.id})
class ProfileDetailView(DetailView):
model = ProfileImage
template_name = 'upload.html'
context_object_name = 'image'
class ProfileImageIndexView(ListView):
model = ProfileImage
template_name = 'upload.html'
context_object_name = 'images'
queryset = ProfileImage.objects.all()
HTML:
<html>
<head>
Upload Picture
</head>
<body>
{% block content %}
<form action="{% url "profile_image_upload" %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="submit" />
</form>
{% endblock %}
</body>
</html>
我刚刚尝试通过传递参数&#34; description&#34;来修改类ProfileImageView。 就像这样:
profile_image = ProfileImage( image = self.get_form_kwargs()。get(&#39; files&#39;)[&#39; image&#39;]),description = self.get_form_kwargs()。get(&#39; files&#39;) [&#39;描述&#39;])
它显示以下错误:
SyntaxError at /blog/upload/
invalid syntax (views.py, line 97)
Request Method: GET
Request URL: http://127.0.0.1:8000/blog/upload/
Django Version: 1.8
Exception Type: SyntaxError
Exception Value:
invalid syntax (views.py, line 97)
Exception Location: /home/enigmathor/testPythweb/testPythweb/urls.py in <module>, line 3
Python Executable: /usr/bin/python
Python Version: 2.7.6
Python Path:
['/home/enigmathor/testPythweb',
'/usr/local/lib/python2.7/dist-packages/Django-1.8-py2.7.egg',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/PILcompat',
'/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/pymodules/python2.7',
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
Server time: Mon, 22 Dec 2014 00:54:23 +0000
尝试了很多其他方法,比如在表单有效方法中添加请求参数,以便稍后获取request.POST参数。
像这样:def form_valid(self,form,request):
上面的小代码的问题是它表明没有发送请求参数。
请一些帮助真的很感激。提前致谢
答案 0 :(得分:1)
最后它奏效了! 它没有用,因为在Views方法的最开始 form_valid 我以错误的方式获取参数“Description”。
就是这样:
def form_valid(self,form): profile_image = ProfileImage( image=self.get_form_kwargs().get('files')['image']), description=self.get_form_kwargs().get('files')['description']) if profile_image.is_valid(): profile_image.save() #self.id = profile_image.id return HttpResponseRedirect(self.get_success_url())
所以问题就在于:
description=self.get_form_kwargs().get('files')['description']
它应该是:
description=self.get_form_kwargs().get('data')['description']
原因是让Django期望第二个参数为“ file
”类型
当它是“ data
”时。
希望它有助于其他人作为框架的初学者进行交易。
现在可行。
<强>干杯.- 强>