Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29990668
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Python/Ruby

2009-08-04 11:44:10

1.模型的Metadata选项
2.db_table

模型对应的数据库表的名字。

例如,假设你有一个应用程序: books (通过执行 manage.py startapp books 命令创建的),又定义了一个模型: class Book ,那么这个模型对应的默认的数据库表名应该为 books_book

(默认是 应用名_类名  为新表的名称 )

通过复写 class Meta 中的 db_table 参数可以改变模型映射的数据库表名:

class Book(models.Model): ... class Meta: db_table = 'things_to_read'

修改其默认表名了!

3.unique_together

组合在一起的一些字段的名字,这些字段的组合值必须是唯一的

class Meta: unique_together = [("department", "extension")]


4.为了实现将业务逻辑统一放到一个地方以后编写程序统一将代码放到M层

这是一个很有价值的技术,它有利于你把业务逻辑统一放到一个地方,这个地方就是:model. 例如:model中有一些自定义的方法。

自定义模型的方法出来即可!

某个模型层的业务逻辑封装到相应的方法里面去!

class Person(models.Model): first_name = models.CharField(maxlength=50) last_name = models.CharField(maxlength=50) birth_date = models.DateField() address = models.CharField(maxlength=100) city = models.CharField(maxlength=50) state = models.USStateField() # Yes, this is America-centric... def baby_boomer_status(self): """Returns the person's baby-boomer status.""" import datetime if datetime.date(1945, 8, 1) <= self.birth_date <= datetime.date(1964, 12, 31): return "Baby boomer" if self.birth_date < datetime.date(1945, 8, 1): return "Pre-boomer" return "Post-boomer"

5.__str__

def __str__(self): return '%s %s' % (self.first_name, self.last_name)

6.get_absolute_url

可以通过定义 get_absolute_url() 方法来告诉Django怎样得到一个对象的URL.


例如,下面这个例子的写法是很不好:

{{ object.name }}

但这段模板代码就很优雅:

{{ object.name }}

将对象的URL写死掉了。然后我们在模板层中能够调用出来的!




如果发现有些复杂的SQL语句用ORM实现起来比较麻烦的话就可以考虑使用CURSOR方式进行处理了!

执行定制的SQL

def my_custom_sql(self): from django.db import connection cursor = connection.cursor() cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz]) row = cursor.fetchone() return row

通过使用django.db方式处理的!


覆盖默认的Model方法

class Blog(models.Model): name = models.CharField(maxlength=100) tagline = models.TextField() def save(self): do_something() super(Blog, self).save() # Call the "real" save() method. do_something_else()




阅读(722) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~