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].