在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)
类元:
#不是:
抽象=真