我正在使用文档中的这个代码段:
class ArticleAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.user = request.user
obj.save()
我已经使用了管理站点并在模型中成功创建了条目,但现在当我尝试编辑条目时,单击“提交”会生成一个TypeError:
Database is trying to update a relational field of type CharField with a value of type User. Make sure you are setting the correct relations
我不明白为什么它会在现在而不是在最初创建期间抛出此错误。
有办法吗?
附录:
重新检查上面的错误的回溯,我也看了看局部变量。看起来请求变量中根本没有任何用户名信息,因此我怀疑在更新的情况下这种情况是否正常。
PS由于回溯仅显示请求对象的图片,因此'用户'属性可能不会显示,但它可能就在那里。
PPS:我发现documentation on the user attribute解释了middleware must be activated,当我查看时,我发现Heroku已经为我添加了这些设置。该属性确实是django.contrib.auth.models.User,其用户名属性是我正在寻找的。 p>
答案 0 :(得分:1)
它表示,无论类obj
属于哪个类,该类的用户属性都不是您引用的User类的外键,而只是CharField。更改obj所属的类中该属性的类型,迁移数据库,然后您会发现这有效。
如果您只想将它作为字符串而不是外键关系,请使用:
class ArticleAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.user = request.user.username
obj.save()