Я переопределяю метод save_model моего ModelAdmin, поэтому я могу установить дополнительные поля в модели. Тем не менее, я продолжаю получать исключение DoNotExist. Я прошел через код с помощью отладчика, и я немного смущен.Почему объект, переданный ModelAdmin.save_model, не соответствует модели?
Модель имеет это поле:
created_by = models.ForeignKey(User, db_column='created_by', related_name='%(class)s_creator')
В методе save_model, когда я смотрю на атрибуты параметра obj
, я вижу это:
Name:
created_by
Value:
str: Traceback (most recent call last):
File "/home/vicki/.eclipse/org.eclipse.platform_3.7.0_155965261/plugins/org.python.pydev.debug_2.3.0.2011121518/pysrc/pydevd_resolver.py", line 182, in _getPyDictionary
attr = getattr(var, n)
File "/usr/lib/pymodules/python2.7/django/db/models/fields/related.py", line 301, in __get__
raise self.field.rel.to.DoesNotExist
DoesNotExist
Name:
created_by_id
Value:
NoneType: None
Где «created_by_id» пришел из , и почему «created_by» не существует?
Нет особых причин для 'db_column = 'created_by'', я просто предпочитаю это. Возможно, я должен позволить Django справиться с этим. Информация в вопросе - это то, что 'obj' выглядит в самом начале метода save_model, прежде чем я что-то ему сделал. Я хочу присвоить поле 'created_by' модели' request.user'. – Pikaling
Вы не можете получить доступ к 'obj.created_by' до тех пор, пока ему не будет присвоено значение. Я обновил свой ответ с предложением о том, как должен выглядеть ваш метод 'save_model'. Я рекомендую вам не использовать 'db_column', но вы можете использовать его здесь, если хотите. – Alasdair
А теперь это имеет смысл - я хотел проверить, было ли это уже назначено, прежде чем я его назначил. Я изменил свой код, поэтому он проверяет 'created_by_id', и если его нет, он назначает' created_by'. Спасибо за вашу помощь. – Pikaling