- 论坛徽章:
- 0
|
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) 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方式进行处理了!
执行定制的SQLdef 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()
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/84280/showart_2017269.html |
|