django admin barfs中的save_model方法更新

时间:2014-12-31 17:39:18

标签: python django-admin

我正在使用文档中的这个代码段:

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,其用户名属性是我正在寻找的。

1 个答案:

答案 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()