[Django]编写第一个Django app,第三部分——玩转模型层的API

玩转模型层的API

现在,让我们进入Python shell中玩转Django为我们提供了的免费的API。使用下面的命令运行Python shell:

  python manage.py shell

现在你已经进入到shell中了,研究一下这些数据库的API吧:

Code

 

等下。<Poll: Poll object> 根本就不能帮助我们描述这个对象。让我们编辑polls模型来修正它(在polls/models.py文件中),给Poll和Choice方法各添加一个__unicode__()方法。

class Poll(models.Model):
# 
    def __unicode__(self):
return self.question
class Choice(models.Model):
# 
    def __unicode__(self):
return self.choice

 

如果__unicode__()看起来没有执行

如果你给你的models添加的__unicode__()方法并没有看到它们的描述信息有变化,你很可能正在使用的是旧版本的Django。(本教程是面向Django最新的开发版写的。)旧版使用__str__()方法。

给你的models添加__unicode__()方法是件很重要的事情,它不仅仅是为了使你在提示窗口中得到智能的提示,更是因为对象的描述在Django自动生成的admin中会使用到。

为什么是__unicode__()而不是django.db.models.Model.__str__()?

如 果你熟悉Python的话,你可能习惯于给你的类添加django.db.models.Model.__str__()方法而不是 __unicode__()方法。我们这里之所以使用__unicode__()是因为Django models默认是处理Unicode的。所有保存在你的数据库中的数据在返回的时候都转换为Unicode。

Django models有一个默认的方法django.db.models.Model.__str__(),它会调用__unicode__()方法并返回一个 UTF-8格式的字符串。也就是说,unicode(p)将会返回一个Unicode的字符串,而str(p)将会返回一个普通的字符串,它的字符是被编 码为UTF-8的。

如果你还不理解的话,你只要记得给你的models添加__unicode__()方法就行了。如果运气不背的话,事情就会如你所愿的执行。

注意下面这些普通的Python方法。让我们添加一些自定义的方法,就如例子所演示的:

 

import datetime
# 
class Poll(models.Model):
# 
    def was_published_today(self):
return self.pub_date.date() == datetime.date.today()

 

注意到,我添加了import datetime来引用Python的标准datetime模块。

让我们再次运行python manage.py shell来进入Python shell吧:

 

Code

 

如果还有读者还不熟悉Python和Django的安装,请阅读我写的一篇关于这方面的教程:
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏