Можно ли в 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"

но и это не сработало. Почему это не сработало? Есть ли какой-нибудь простой способ заставить это работать?

Вернуться на верх