Как я могу получить доступ к полю модели Django через обратную связь? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть три Django модели ModelA, ModelB и ModelC. В моей логике c экземпляр ModelB или ModelC связан с ModelA через отношение OneToOne. Я хотел бы получить доступ к полю of_interest через ModelA s обратное отношение к ModelB или ModelC. Это возможно?

class ModelA(models.Model):
    ...

class ModelB(models.Model):
    model_a = models.OneToOneField(
        ModelA,
        related_name='%(class)s_model_a',
        of_interest=models.IntegerField(default=42),
        ...
    )

class ModelC(models.Model):
    model_a = models.OneToOneField(
        ModelC,
        related_name='%(class)s_model_a',
        of_interest=models.IntegerField(default=42),
        ...
    )

1 Ответ

1 голос
/ 30 апреля 2020

Вы должны использовать OneToOneField, но это, вероятно, опечатка.

Но если у вас есть модель A, то автоматически модели B и C можно получить с помощью model_a.modelb или model_a.modelc , В вашем случае это будут model_a.modelb_model_a и model_a.modelc_model_a, потому что вы задаете связанное имя.

Но использование этого атрибута может привести к ошибке, если объект еще не существует для модели B или C, поэтому вам не хватит ссылки. В этом случае вы можете работать с hasattr. Таким образом hasattr(model_a, 'modelb_model_a').

model_a = ModelA.objects.get()
of_interest = hasattr(model_a, 'modelb_model_a') and model_a.modelb_model_a.of_interest'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...