Django model 中meta options之 abstract

当abstract=True时,这个model就变成了abstrct base class,那这个基类有什么特性呢?

当某一model中设置了abstract=True时,就会使该model中的字段都不会产生对应的表,而是可以作为基类加入到其他model中

那有什么用呢?

有时多个model有些相同的字段,这样很浪费时间,而且重复本身也不利于代码简洁。好该abstract来了

看官例:

from django.db import models
class CommonInfo(models.Model):
  name = models.CharField(max_length=100)
  age = models.PositiveIntegerField()
    class Meta:
      abstract = True

class Student(CommonInfo):
    home_group = models.CharField(max_length=5)

这样,这个student model就有三个字段分别为:name, age, home_group,其中前两个继承自abstract 基类。同样,这个abstract base class又可以继承另一个基类。

注意:

commonInfo基类不能当作普通的model来使用。同样abstract base class 也有一此无法设置的属性,例如:db_table,即表,很明显,你不会想继承了abstract 基类的model都用一个表。

时间: 2024-08-23 12:35:10

Django model 中meta options之 abstract的相关文章

UUIDField在Django Model中的使用经验

今天下午在将数据库从旧库导入到新库时,完成后发现Django网站无法打开,报"ValueError, badly formed hexadecimal UUID string",最终定位到原因是一个UUIDField类型字段的值为0,造成Django无法将0验证为UUID类型,从而引发ValueError异常.现总结UUIDField在Django Model中的使用经验如下. 在Django中UUIDField类型的字段可以作为主键(主键是绝对不可能为NULL值的)使用,这个是丝毫没

django model之Meta选项

Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性 abstract 如果为True,就表示抽象基类,不创建表,只是把字段传递给继承自己的子类使用 app_label 这个选型只在一种情况下使用,就是你的模型不在默认的应用程序包下的models.py文件中,这时候需要指定你这个模型是哪个应用程序的.如果模型在INSTALLED_APPS之外被定义,则必须通过app_label声明它属于哪个app db_table 该模型所用数据表的名称.Django默认使用你的

Django model 中的字段解释

Django 通过 models 实现数据库的创建.修改.删除等操作,本文为模型中一般常用的类型的清单,便于查询和使用: AutoField:一个自动递增的整型字段,添加记录时它会自动增长.你通常不需要直接使用这个字段:如果你不指定主键的话,系统会自动添加一个主键字段到你的model.(参阅自动主键字段) BooleanField:布尔字段,管理工具里会自动将其描述为checkbox. CharField:字符串字段,单行输入,用于较短的字符串,如要保存大量文本, 使用 TextField,Ch

获取django model 中得fields

UserProfile._meta.fields [<django.db.models.fields.related.OneToOneField: user>,  <django.db.models.fields.CharField: username>, <django.db.models.fields.CharField: nickname>, <django.db.models.fields.EmailField: email>, <django

Django 【第二十六】Django model中的 class Meta 详解

class Foo(models.Model): bar = models.CharField(maxlength=30) class Meta: # ... Model 元数据就是 "不是一个字段的任何数据" -- 比如排序选项, admin 选项等等. 下面是所有可能用到的 Meta 选项. 没有一个选项是必需的. 是否添加 class Meta 到你的 model 完全是可选的. app_label app_label这个选项只在一种情况下使用,就是你的模型类不在默认的应用程序包

Django model 中的 class Meta 详解

class Foo(models.Model): bar = models.CharField(maxlength=30) class Meta: # ... Model 元数据就是 "不是一个字段的任何数据" -- 比如排序选项, admin 选项等等. 下面是所有可能用到的 Meta 选项. 没有一个选项是必需的. 是否添加 class Meta 到你的 model 完全是可选的. app_label app_label这个选项只在一种情况下使用,就是你的模型类不在默认的应用程序包

Django model中的 class Meta 详解

class Foo(models.Model): bar = models.CharField(maxlength=30) class Meta: # ... Model 元数据就是 "不是一个字段的任何数据" -- 比如排序选项, admin 选项等等. 下面是所有可能用到的 Meta 选项. 没有一个选项是必需的. 是否添加 class Meta 到你的 model 完全是可选的. app_label app_label这个选项只在一种情况下使用,就是你的模型类不在默认的应用程序包

django model中的save()方法

Model.save(force_insert=False, force_update=False, using=DEFAULT_DB_ALIAS, update_fields=None) id和pk 如果一个model里没有显示声明哪一个字段(field)是主键(即在某个字段里声明primary_key=True),则django会自动生成一个名为id的AutoFields作为主键.model里的主键都有一个别名叫做pk(primary_key的缩写),无论这个主键是自动生成的还是我们指定的.

Django: ModelForm中Meta的fields等成员介绍

class MyForm(forms.ModelForm): realname = forms.CharField() phone = forms.CharField() class Meta: model = MyUser fields = ('phone',) form = MyForm() # 照样会输出realname form.as_table() fields 是把MyUser 中的字段拿过来,你用什么就拿什么 比如MyUser 中有realname , phone 两个字段,在My