元数据()选项

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 的文档。

相关文章:

  • 2021-08-04
  • 2022-01-09
  • 2022-12-23
  • 2022-01-01
  • 2022-12-23
  • 2021-12-08
  • 2021-10-18
猜你喜欢
  • 2021-07-31
  • 2021-10-07
  • 2021-10-03
  • 2021-10-21
  • 2021-09-28
  • 2022-01-07
相关资源
相似解决方案