元数据()选项
Meta 定义模型的元数据,例如:
from django.db import models class Ox(models.Model): horn_length = models.IntegerField() class Meta: ordering = ["horn_length"] verbose_name_plural = "oxen"
模型元数据是“任何不是字段的数据”,比如排序选项(ordering),数据库表名(db_table)或者人类可读的单复数名称(verbose_name 和verbose_name_plural)。Meta是完全可选,所有选项都不是必须的。
模型选项参考找到。
- objects
- Managers 只能通过模型类访问,而不能通过模型实例访问。
Manager 方法用于“表范围”的事务,模型方法则着眼于特定的模型实例。
这是一项非常有价值的技术,让业务逻辑位于同一个地方 —— 模型中。
例如,下面的模型具有一些自定义的方法:
from django.db import models class Person(models.Model): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) birth_date = models.DateField() def baby_boomer_status(self): "Returns the person's baby-boomer status." import datetime if self.birth_date < datetime.date(1945, 8, 1): return "Pre-boomer" elif self.birth_date < datetime.date(1965, 1, 1): return "Baby boomer" else: return "Post-boomer" def _get_full_name(self): "Returns the person's full name." return '%s %s' % (self.first_name, self.last_name) full_name = property(_get_full_name)
属性。
覆盖模型预定义的方法 —— 但是有些方法你会始终想要定义:
__str__() (Python 3)
最突出的用法是在交互式控制台或者管理站点显示一个对象。
默认方法返回的内容没多大用处。
__unicode__() (Python 2)
-
Python 2中 等同于 __str__().
get_absolute_url()
-
Django 在它的管理站点中使用到这个方法,在其它任何需要计算一个对象的URL 时也将用到。
任何具有唯一标识自己的URL 的对象都应该定义这个方法。
delete() 的工作方式。
你可以自由覆盖这些方法(和其它任何模型方法)来改变它们的行为。
save() 中关于它接收的参数的文档):
from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() def save(self, *args, **kwargs): do_something() super(Blog, self).save(*args, **kwargs) # Call the "real" save() method. do_something_else()
你还可以阻止保存:
from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() def save(self, *args, **kwargs): if self.name == "Yoko Ono's blog": return # Yoko shall never have her own blog! else: super(Blog, self).save(*args, **kwargs) # Call the "real" save() method.
如果你忘记调用超类的这个方法,默认的行为将不会实行并且数据库不会有任何改变。
**kwargs,将保证你的代码自动支持这些新的参数。
注意:
批量操作中被覆盖的模型方法不会被调用
post_delete 信号。
post_save。
原始 SQL 的文档。