Подтвердить что ты не робот

Django: присвоение внешнего ключа до того, как будет сохранена целевая модель

Предположим, что A и B - это модели django, где A имеет поле внешнего ключа для B:

a = A()
b = B()
a.my_b = b
b.save()
a.save()

Удивительно A сохраняется с null в поле внешнего ключа my_b. Если вы проверили a.my_b до или после сохранения, это относится к экземпляру B, однако кажется, что django оценивает сам внешний ключ при назначении a.my_b = b, а не на a.save(). В сложных системах и потоках может быть сложно изменить порядок команд, поэтому просто сохранить B, прежде чем назначать его A, может оказаться непрактичным...

Добавление невероятного утверждения a.my_b=a.my_b между командами сохранения работает, но мне кажется ужасным обходным путем.

Есть ли способ настроить django для переоценки внешних ключей при сохранении экземпляров модели?

Есть ли другой подход, который может решить эту проблему?

4b9b3361

Ответ 1

Там есть билет Django, описывающий эту проблему, # 8892.

Тем временем нет настройки конфигурации, которая изменяет поведение. Вам придется изменить порядок операций сохранения и присваивания или выполнить дополнительное задание.