我认为以下代码说明了我要做什么
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)
我该如何进行这项工作?谢谢。
答案 0 :(得分: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