1

我认为以下代码解释了我正在尝试做的事情

from django.db import models


class MyBaseClass(models.Model):
    type = models.IntegerField()

    class Meta:
        abstract = True

    def save(self, *args, **kwargs):
        self.type = #What Should I write here?#
        self.type = self.class.type ?
        super().save(*args, **kwargs)


class Model1(MyBaseClass):
    TYPE = 1


class Model2(MyBaseClass):
    TYPE = 2

我想确保以下断言有效:

instance1 = Model1.objects.create()
assert(instance1.type, 1)
instance2 = Model2.objects.create()
assert(instance1.type, 2)

我怎样才能使这项工作?谢谢。

4

1 回答 1

1

设置继承模型的默认值

如果你想设置继承模型的默认值,你可以猴子补丁这些。喜欢:

class Model1(MyBaseClass):
    TYPE = 1


class Model2(MyBaseClass):
    TYPE = 2

Model1._meta.get_field('type').default = Model1.TYPE
Model2._meta.get_field('type').default = Model2.TYPE

为模型添加静态属性

如果.type所有Model1对象的总是 1,而Model2对象总是2,则根本没有理由将这些类型存储在数据库中。这些模型存储在不同的表中,因此记录源自app_model1表的事实“暗示”了这一点。在这种情况下,您可以设置一个类属性,例如:

class MyBaseClass(models.Model):
    type = None

    class Meta:
        abstract = True


class Model1(MyBaseClass):
    type = 1


class Model2(MyBaseClass):
    type = 2
于 2019-01-26T15:24:00.480 回答