在django模型中使用分离主键继承模型
我有一个抽象模型,我希望我的所有模型都继承它:在django模型中使用分离主键继承模型,django,django-models,Django,Django Models,我有一个抽象模型,我希望我的所有模型都继承它: from django.db import models class Audit(models.Model): create_date = models.DateTimeField(auto_now_add=True) last_modify_date = models.DateTimeField(auto_now=True) create_by = models.CharField(null=True, max_len
from django.db import models
class Audit(models.Model):
create_date = models.DateTimeField(auto_now_add=True)
last_modify_date = models.DateTimeField(auto_now=True)
create_by = models.CharField(null=True, max_length=50)
last_modify_by = models.CharField(null=True, max_length=50)
class Meta:
abstract: True
现在,作为示例,我有两个模型:
from general.AuditableModel import Audit
class Province(Audit):
name = models.CharField(max_length=30)
class Meta:
db_table = 'province_v2'
verbose_name_plural = _('provinces')
verbose_name = _('province')
class City(Audit):
province_id = models.ForeignKey('address.Province', on_delete=models.CASCADE, related_name='cities')
name = models.CharField(max_length=30)
class Meta:
db_table = 'city_v2'
verbose_name_plural = _('cities')
verbose_name = _('city')
在我的数据库中,它生成如下表:
create table province_v2
(
audit_ptr_id integer not null
primary key
references general_audit
deferrable initially deferred,
name varchar(30) not null
);
create table city_v2
(
audit_ptr_id integer not null
primary key
references general_audit
deferrable initially deferred,
name varchar(30) not null,
province_id_id integer not null
references province_v2
deferrable initially deferred
);
create index city_v2_province_id_id_12975070
on city_v2 (province_id_id);
但我希望我的模型有独立的
id整数主键
如果没有抽象表,现在它生成了通用的审计表,而您无意中生成了一个非抽象模型。事实上,为了分配一个变量,您可以使用方程sybol(=
)。您使用了冒号(:
)。这意味着您在数据库中为Audit
创建了一个真实的表,因此使用了Django的继承机制
因此,您应该编写abstract=True
:
class Audit(models.Model):
create_date = models.DateTimeField(auto_now_add=True)
last_modify_date = models.DateTimeField(auto_now=True)
create_by = models.CharField(null=True, max_length=50)
last_modify_by = models.CharField(null=True, max_length=50)
class Meta:
# not :
abstract = True
类审核(models.Model):
创建日期=模型。日期时间字段(自动现在添加=真)
last_modify_date=models.DateTimeField(自动_now=True)
create_by=models.CharField(null=True,max_length=50)
last_modify_by=models.CharField(null=True,max_length=50)
类元:
#不是:
抽象=真