TypeError: Абстрактные модели не могут быть инстанцированы (Django)
У меня есть абстрактные модели A
и B
и дочерняя модель C
.
class A(models.Model):
field1 = models.CharField(max_length=24)
class Meta:
abstract = True
class B(models.Model):
field1 = models.CharField(max_length=24)
class Meta:
abstract = True
def make_A(self):
A(field1=self.field1).save()
class C(B):
pass
Если я пытаюсь запустить C.make_A()
, то получаю ошибку TypeError: Abstract models cannot be instantiated
. Поэтому я вынужден переписать метод make_A
на дочернем объекте. Есть ли способ написать метод, который инстанцирует A
под абстрактным B
?
Проблема не в том, что B
абстрактен, проблема в том, что A
абстрактен. Но вы можете сделать "шаблонный метод", который затем слегка измените в C
с помощью:
class B(models.Model):
concrete_A = None
field1 = models.CharField(max_length=24)
class Meta:
abstract = True
def make_A(self):
self.concrete_A.objects.create(field1=self.field1)
class C(B):
concrete_A = SubA
С SubA
конкретным подклассом A
.
При этом, учитывая, что я понимаю, что вы хотите сделать, кажется, что вы просто в какой-то степени повторяете то, что делает django-simple-history
[readthedocs.io].