我在admin中添加记录时发生错误。我的模型就像
class THMusic(models.Model): originmusic = models.ForeignKey(Originalmusic) name = models.CharField(max_length=100) audiofile = models.FilePathField(path=os.path.dirname(os.path.abspath(__file__))+'/resource', recursive=True) team = models.CharField(max_length=50) album = models.CharField(max_length=50) class THMusicAdmin(admin.ModelAdmin): list_display = ('name', 'originmusic', )
但我得到了UnicodeDecodeError:
/ admin / thmusic / thmusic / add /
中的UnicodeDecodeError
'ascii' codec can't decode byte 0xe3 in position 54: ordinal not in range(128)
Request Method: GET
Request URL: http://127.0.0.1:8006/admin/thmusic/thmusic/add/
Django Version: 1.6.5
Exception Type: UnicodeDecodeError
Exception Value:
'ascii' codec can't decode byte 0xe3 in position 54: ordinal not in range(128)
Exception Location: /usr/local/lib/python2.7/dist-packages/django/forms/fields.py in __init__, line 1057
Python Executable: /usr/bin/python2.7
Python Version: 2.7.6
Python Path:
['/home/hyzhappy/djangoprojects/myblog',
'/usr/local/lib/python2.7/dist-packages/simplejson-3.6.3-py2.7-linux-i686.egg',
'/home/hyzhappy/djangoprojects/myblog',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-i386-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/local/lib/python2.7/dist-packages/PIL',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/PILcompat',
'/usr/lib/python2.7/dist-packages/gst-0.10',
'/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/pymodules/python2.7',
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client',
'/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']
如果我删除" recursice = True"在FilePathField中,它会很顺利。但这不是我的期望 更多细节
Unicode错误提示 无法编码/解码的字符串是:urce /������ UnicodeDecodeError(' ascii',' / home / hyzhappy / djangoprojects / myblog / thmusic / resource / \ xe3 \ x83 \ x97 \ xe3 \ x83 \ xac \ xe3 \ x82 \ xa4 \ xe3 \ x83 \ xa4 \ xe3 \ x83 \ xbc \ xe3 \ x82 \ xba \ xe3 \ x82 \ xb9 \ xe3 \ x82 \ xb3 \ xe3 \ x82 \ xa2.mp3',54,55,'序数不在范围内(128)&#39)
答案 0 :(得分:0)
可能不是正确的答案,但您可以将其视为可能的原因。
有时候在Django中(我有与tastypie相同的情况),因为一个初始无关的错误试图显示但由于奇怪的字符而不能出现UnicodeDecodeError。
在我的情况下,这是因为我在我的代码注释(不是ascii)中添加了法语口音。这通常不会产生错误,但是当某个地方实际出现错误并且Django试图在调试模式下显示此错误时,它不能因为非ascii字符而引发UnicodeDecodeError而不是引发初始错误。
只是尝试删除代码中的任何可疑字符(如果有),然后再次检查错误是否仍然相同。
答案 1 :(得分:0)
幕后,FilePathField
使用os.walk
/ os.listdir
来查找文件。这些功能有两种模式" python中的操作:字节串和unicode。模式是根据给定的路径类型选择的,即如果您为其提供unicode
字符串,则生成的文件列表将为unicode
,否则将为字节字符串。
因此,要解决此问题,只需向FilePathField
提供一个unicode路径,如下所示(请注意u
开头的u'/resource'
):
audiofile = models.FilePathField(path=os.path.dirname(os.path.abspath(__file__))+u'/resource', recursive=True)