DJANGO处理上传图片的问题求教。

2012-05-17 20:09:09 +08:00
 frederick036
菜鸟自学中,我们学校不教这个。
我建了个叫做newartist的model, 里面有一些charfield字段和一个叫image的imagefield字段, 用这个model建了个form叫artistform。

在views里面处理上传的图片是这样的:
now = datetime.now()
file_name="%d_%d_%d_%d_%d_%d" % (now.year, now.month, now.day, now.hour, now.minute, now.second) + ".png"
upload_path = "/**/django/mysite/media/"
file_path = upload_path+file_name
f = request.FILES['image']
parser = ImageFile.Parser()
for chunk in f.chunks():
parser.feed(chunk)
img = parser.close()
img.save(file_path)

就是简单地把文件以时间命名然后保存到一个目录里。
然后我把model里其他几个字段保存到数据库就报错了。
aname = form.cleaned_data['name']
agenre = form.cleaned_data['genre']
acountry = form.cleaned_data['artist_country']
abio = form.cleaned_data['bio']
newartist(name=aname, genre=agenre, artist_country=acountry, bio=abio).save()

错误出在上文最后一行,是DatabaseError at /new/ (这个URL对应的就是上面的那个VIEW)
(1054, "Unknown column 'image' in 'field list'")

很明显是图片的原因。
请问应该怎么处理上传的图片?图片的保存和MODEL数据库的关系我有点糊涂,看官方文档也搞不清楚…
谢谢
3789 次点击
所在节点    Python
6 条回复
skyahead
2012-05-17 21:52:53 +08:00
你的问题没看懂,我是这样做的:

class People(models.Model):
portrait = models.ImageField(upload_to="images/people", blank=True)


class PeopleForm(forms.ModelForm):
portrait = forms.ImageField(required=False)
class Meta:
model = People

view:
people_form = PeopleForm(request.POST, request.FILES)
if people_form.is_valid():
people_form.save()



文件名django自动生成。。。
kojp
2012-05-17 21:56:44 +08:00
当时看的是纸质书,在图片这块也的确是有遇到一些问题。大多是相关py模块没加载。。。

你这个,让人感觉是和数据库这块出问题了。

建议从两个方面下手。
A:进MYSQL看你的IMAGE 字段是否存在。
2: 把FORM和DB交互的这一块,想办法PRINT 出SQL语句~~~希望就知道出错在哪儿了。
frederick036
2012-05-17 22:13:05 +08:00
@skyahead 我这样试过,这样的话就会直接报错耶。。。 错误一样。。。
frederick036
2012-05-17 22:13:29 +08:00
@kojp 请问MYSQL里面IMAGE字段应该是什么类型的?
lazywen
2012-05-17 22:42:00 +08:00
我一直自己手动处理图片上传,django的imagefield也是一个varchar,保存前添加一个image='路径'
skyahead
2012-05-18 04:12:38 +08:00
@frederick036 把下面的加到settings.py里,然后看看具体错误是什么,最好把model/view/form等等都贴出来大家看看。

DEBUG = TEMPLATE_DEBUG = True
import logging
logging.basicConfig(
level = logging.DEBUG,
format = '%(asctime)s %(levelname)s %(message)s',
)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/36359

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX