我重写了ModelAdmin的save_model方法,因此我可以在模型上设置一些额外的字段。但是,我一直得到一个DoesNotExist异常。我用调试器逐步完成了代码,我有点困惑。
模型有这个字段:
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'不存在?
答案 0 :(得分:0)
您使用db_column='created_by'
的原因是否有特殊原因?你在处理遗留数据库吗?通常,您可以让Django处理db列的名称。默认情况下,Django会将_id
附加到字段名称以创建db列名称。这在Django Foreign Key文档中有解释。
在您的模型实例上,您可以访问:
`obj.created_by_id` # the primary key of the related User instance
`obj.created_by` # The `User` instance
您无法在方法中访问obj.created_by
,因为您尚未为其分配用户。 created_by_id
值为None
,尝试使用主键User
获取None
自然会引发DoesNotExist
例外。
您的save_model
方法应如下所示:
class MyModelAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.created_by = request.user
obj.save()