django.db.models.Model
。通过类之间的继承 Django 会对自定义的 Model 自动添加了两个属性分别是 id 和 objects。django.db.models.Manager
from django.db import models class AbstractBase(models.Model): id = models.AutoField() content = models.CharField(max_length=100) username = models.CharField(max_length=80) nowday = models.DateTimeField() class Meta: abstract = True class SomeThing(AbstractBase): testexams = models.CharField(max_length=50) class SomeComment(AbstractBase): level = models.CharField(max_length=20)本例中 3 个类映射到数据库后,但会被定义为两个数据表。 分别是 SomeThing 与 SomeComment 它们都继承自 AbstractBase,且继承了父表中的所字段值,同时自身又自定义了新的字段。所以,它们对应的字段分别如下所示:
from django.db import models class a(A): testname=models.charFiled(max_length=255,help_text="测试")如果你想指定链接父类的属性名称,你可以创建你自己的 OneToOneField 字段,并且设置 parent_link=True 从而使用该字段链接父类。
class ChildModelName(ParentModelName): class Meta: ordering = []#子表将不会排序
这里需要注意的是代理模型不会在数据库中创建新的数据表,它将使用父 Model 的数据表,即对代理模型的 CURD 操作将会作用到原始的 Model 中。
class BookExtend(Book): """ BOOK代理模型 """ class Meta: ordering=['id'] #定义Meta选项顺序排序按照id字段 proxy=True #设置代理模型 def __str__(self): return "title:%s pub:%s price:%s" % (self.title, self.pub, self.price) #定义方法添加完上述代码,然后执行数据库迁移操作。通过查看 MySQL 数据库可以看到并没有新建 BookExtend 数据表。如下所示:
mysql> show tables; +----------------------------+ | Tables_in_bookstoredb | +----------------------------+ | auth_group | | auth_group_permissions | | auth_permission | | auth_user | | auth_user_groups | | auth_user_user_permissions | | django_admin_log | | django_content_type | | django_migrations | | django_session | | index_author | | index_author_books | | index_book | | index_extenduserinfo | | index_pubname | | index_userinfo | +----------------------------+ 16 rows in set (0.00 sec)
提示:最后需要注意的是代理只能继承自一个非抽象的基类,并且不能同时继承多个非抽象基类。
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有