Несколько человек просили об этом.Смотрите, например, билет # 10227 .Но у меня есть идея, что это не изменится (очень) скоро (если вообще).Было написано много кода с предположением, что если нет обратного объекта, возникнет ошибка, и простое изменение этого поведения может привести к поломке нескольких частей Django, плагинов, веб-серверов и т. Д.
В результатеЯ думаю, что, вероятно, лучше " научиться жить с этим " (по крайней мере, пока).Тем не менее, есть кое-что, что мы можем сделать, чтобы немного облегчить боль, используя " protected " related_name
:
class M(models.Model):
rel = models.OneToOneField(X<b>, related_name='_m'</b>, on_delete=models.CASCADE)
Затем мы можем добавить @property
к модели X
:
class X(models.Model):
<b>@property
def m(self):
try:
return self._m
except M.DoesNotExists:
return None</b>
Мы можем использовать этот подход, если мы определили модель X
самостоятельно, или мы можем использовать исправление обезьяны , чтобы добавитьтакие свойства для классов, которые были определены в библиотеке и т. д.
Так что теперь мы можем (безопасно) использовать some_x.m
.Но, тем не менее, это не решит все наши проблемы, так как, например, для фильтрации и т. Д. Выше не будет работать.