【问题标题】:Django does not save a field containing umlauts [duplicate]Django不保存包含变音符号的字段[重复]
【发布时间】:2012-12-20 01:29:00
【问题描述】:

可能重复:
python : working with german umlaut

我尝试使用来自django-admin 中图像的一些 exif 元数据填充数据库字段。我正确解码它意味着print 确实显示带有变音符号的字符串。但是,当我在模型上调用 save() 时,字符串永远不会出现在数据库(sqlite)中。它适用于没有变音符号的字符串以及包含变音符号的常量字符串。没有错误或可以提示我出了什么问题的东西。这就是为什么我不知道要搜索什么。

我正在尝试隔离代码的重要部分:

型号save功能:

def save(self, *args, **kwargs): 
    self.url = slugify(self.name) 
    super(Photo, self).save(*args, **kwargs)

admin.py 文件中的save_model 函数:

def save_model(self, request, obj, form, change):
    if("original_image" in request.FILES):
        file = request.FILES["original_image"]
        if (not obj.description):
          from silbertools.get_exif import get_exif
          obj.description = get_exif(file)
        if (not obj.name):
          obj.name = unicode(file)[:-4][:100]
    obj.save()

相关的description字段定义如下:

description = models.TextField(blank=True)

get_exif 函数:

def get_exif(fn):
    i = Image.open(fn)
    info = i._getexif()
    if info:
        for tag, value in info.items():
            decoded = TAGS.get(tag, tag)
            if (decoded == "UserComment"):
                var = value[8:].decode('latin1')
                print(u"The string is: {0}".format(var))
                return var
    return u""

get_exif() 函数运行良好,据我从 print 语句可以看出。我在obj.save() 之前验证了save_model() 中的描述设置正确。

一旦字符串中存在变音符号并且从 exif 元数据中读取该字符串,它不会出现在数据库中,似乎仍然没有任何帮助。没有错误,模型的其余部分按预期添加,只是描述字段为空。

我希望有人能提取足够的信息来帮助我解决问题。

提前致谢!

【问题讨论】:

  • 不,那不是我的问题!我没有收到任何错误!一切都打印得很好。它只是没有存储到数据库中。

标签: python database django encoding django-admin


【解决方案1】:

在解释器中工作正常,您是否在模块顶部添加了编码?

# -*- coding: utf-8 -*-

test = "März"

if __name__ == "__main__":
    print test.decode('utf-8')

edit:简单搜索python+umlaut,这个答案已经给出here

【讨论】:

  • 是的,我确实添加了编码。如前所述,我没有收到任何错误。即使没有编码,一切都应该没问题,因为字符串的所有来源都是外部的。编码仅用于此特定文件 afaik 中定义的字符串常量。
猜你喜欢
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多