Использование метода унаследованного класса на классах моделей Django
У меня есть два класса модели Django с соответствующими таблицами DB, оба используют один и тот же метод класса. Поэтому я провел рефакторинг и создал родительский класс с методом class:
from django.db import models
from django.forms.models import model_to_dict
class Parent(models.Model):
@classmethod
def get_random(cls, variables: Set[str]) -> str:
elements: list = []
for o in cls.objects.filter(active=True):
elements.append(model_to_dict(o, fields=["id", "string"]))
chosen: dict = choice(elements)
# some other code...
return chosen["string"]
class Child1(Parent):
string = models.CharField(max_length=100)
type = models.ManyToManyField(Type, related_name="article_titles")
active = models.BooleanField(default=True)
class Meta:
db_table = "table_child_1"
class Child2(Parent):
string = models.TextField()
active = models.BooleanField(default=True)
class Meta:
db_table = "table_child_2"
Когда я вызываю метод на одном из дочерних классов, например chosen_string: str = Child1.get_random(variables=variables)
, я получаю ошибку Django DB:
django.db.utils.OperationalError: no such table: app_name_parent
.
Похоже, что метод родительского класса вызывается на имя таблицы Django DB по умолчанию для родительского класса, вместо дочернего.
Что я здесь упустил? Каким будет наиболее элегантное решение для использования одного и того же метода пользовательского класса, запрашивающего БД для двух моделей Django?