我正在使用Python 2.7和Django 1.9.7。我正在尝试向models.py添加一个字符串方法,但我收到了错误。 当我运行" python manage.py runserver"时,我得到以下内容:
ValueError:@ python_2_unicode_compatible无法应用于Languages,因为它没有定义__ str __()。
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Languages(models.Model):
langid = models.AutoField(db_column='LangID', primary_key=True)
lname = models.CharField(db_column='lName', max_length=50, blank=True, null=True)
class Meta:
db_table = 'languages'
def __str__(self):
return self.lname
这与以下问题非常相似:python_2_unicode_compatible error
但问题是Django不是一个足够新的版本。显然,这里有一些不同的东西。关于问题可能是什么的任何想法?
答案 0 :(得分:1)
写作时
<template is="dom-repeat" items="[[routes]]">
<div>{{item.color}} | {{item.Index}}</div>
<google-map-directions id="{{item.name}}"
renderer-options='{"draggable":true,"polylineOptions":{"draggable":true,"strokeColor":"{{item.color}}"},"routeIndex":1}'
start-address="{{item.startAddress}}"
end-address="{{item.endAddress}}"
travel-mode="DRIVING"
waypoints='[{"location": "Palo Alto"}, {"location": "San Mateo"}]'>
</google-map-directions>
<div id="dirt"></div>
</template>
然后你超越了内置的'str'方法。 因此,无论何时使用str,都会调用您定义的方法而不是内置方法。
因此,如果您想要做的就是返回模型“Languages”对象的“lname”,那么您可以使用不同的def名称
def __str__(self):
return self.lname
这个'%s'解决了你的unicode问题。
现在,如果你不想使用def的其他名称,但想要覆盖内置的'str'函数,那么下面的代码应该适合你:
def lang_name(self):
return u'%s' % self.lname
但是,默认情况下,Django模型具有以下函数,该函数返回对象的默认值:
def __str__(self):
return u'%s' % self.lname
答案 1 :(得分:1)
我通过简单地重启服务器解决了这个问题。
Ctrl+C
之后;
python manage.py runserver