Можно ли в Django установить атрибут related_name для поля из абстрактного класса в атрибут конкретного класса?
В Django у меня есть абстрактный класс:
class AbstractResult(models.Model):
specimen = models.ForeignKey(Specimen, on_delete=models.CASCADE, related_name='%(class)s')
...
class Meta:
abstract = True
Это дает мне некоторый контроль над связанным именем этого поля для каждого конкретного класса, но не полный контроль. Я бы хотел иметь возможность устанавливать это имя в каждом конкретном классе.
Я подумал, может быть, я мог бы использовать callable:
class AbstractResult(models.Model):
def get_related_name(self):
raise NotImplementedError("Override this method in your concrete model classes!")
specimen = models.ForeignKey(Specimen, on_delete=models.CASCADE, related_name=get_related_name)
Но это не сработало, так как аргумент related_name
не принимает callable.
Я также подумал, что я мог бы сделать:
class AbstractResult(models.Model):
related_name = 'OVERRIDE THIS ATTRIBUTE!'
specimen = models.ForeignKey(Specimen, on_delete=models.CASCADE, related_name=related_name)
и затем попытаться использовать его в конкретном классе:
class TestA_Result(AbstractResult):
related_name = "test_a_results"
но и это не сработало. Почему это не сработало? Есть ли какой-нибудь простой способ заставить это работать?