我是django的新手,正在写一个推特克隆来学习它。
我有一个类似以下的模型
class message(models.Model):
text = models.TextField()
date_n_time = models.DateTimeField(default=datetime.now, null=True,blank=True)
parent_2 = models.ForeignKey('self',null=True,blank=True)
def __unicode__(self):
return str(self.id)+"_"+self.text+"_"+str(self.date_n_time)+"_"+"___"+str(self.parent_2)
现在,我添加了一条文本等于以下内容的消息(引号是我通过Django创建表单输入的内容。
'刺'
我试图通过管理界面访问邮件对象:127.0.0.1:8000 / admin / core / message /
我在
中收到以下错误消息' ASCII'编解码器不能解码位置9中的字节0xe2:顺序不在 范围(128)。您传递了消息:[错误的Unicode数据](类 ' core.models.message&#39)
其他堆栈溢出答案似乎表明这是unicode问题,但如果我将测试更改为
"刺"
我没有收到任何错误。
为什么我只用单引号收到错误?如何通过django表单/模型代码捕获此问题,最好是在保存输入表单时? p>
答案 0 :(得分:3)
我会尝试将您的unicode更改为以下内容:
def __unicode__(self):
return u'{}"_"{}"_"{}"_""__"{}'.format(self.id, self.text, self.date_n_time, self.parent_2)
那应该返回你最初想要的东西,包括引号。我还会考虑将"_""__"
的部分与"___"
结合起来。如果下划线彼此跟随,则没有真正的理由将它们分开。
如果您不想要引号,只需删除它们即可。保留{}
。与"%s" % (context)
祝你的克隆好运!
答案 1 :(得分:2)
您使用的是Python2.7还是Python3?如果您使用的是Python2.7,请使用__unicode__()
,否则请使用__str__()
。
请查看此link的“__str__ or __unicode__?
”部分。为了正确使用,请查看__unicode__()
和__str__()
的文档。
修改强>
我无法复制你的错误。我可以访问管理员就好了。你有没有机会使用旧版本的Django(早于1.8)?
尝试使用它,因为这被认为是处理Django文档认可的unicode字符串的正确方法。
def __unicode__(self):
return u'%s_%s_%s___%s' % (self.id, self.text, self.date_n_time, self.parent_2)