V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
frederick036
V2EX  ›  Python

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

  •  
  •   frederick036 · 2012-05-17 20:09:09 +08:00 · 3813 次点击
    这是一个创建于 4605 天前的主题,其中的信息可能已经有所发展或是发生改变。
    菜鸟自学中,我们学校不教这个。
    我建了个叫做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数据库的关系我有点糊涂,看官方文档也搞不清楚…
    谢谢
    6 条回复    1970-01-01 08:00:00 +08:00
    skyahead
        1
    skyahead  
       2012-05-17 21:52:53 +08:00   ❤️ 1
    你的问题没看懂,我是这样做的:

    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
        2
    kojp  
       2012-05-17 21:56:44 +08:00   ❤️ 1
    当时看的是纸质书,在图片这块也的确是有遇到一些问题。大多是相关py模块没加载。。。

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

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

    DEBUG = TEMPLATE_DEBUG = True
    import logging
    logging.basicConfig(
    level = logging.DEBUG,
    format = '%(asctime)s %(levelname)s %(message)s',
    )
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1478 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:13 · PVG 01:13 · LAX 09:13 · JFK 12:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.