Django管理后台中用户ForeignKey的默认值

20
author = models.ForeignKey(User)

有没有办法将此字段的默认值设置为自动选择已登录用户? 我知道您可以在保存方法中执行此操作,但我的客户要求在编辑时自动默认为已登录用户,以避免混淆。

这篇文章介绍了如何在保存期间更新它,但不是在编辑时。


“编辑时间”是什么意思?我的意思是,文章在保存时被编辑,不是吗? - arie
2个回答

48
class MyModelAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == 'author':
            kwargs['initial'] = request.user.id
        return super(MyModelAdmin, self).formfield_for_foreignkey(
            db_field, request, **kwargs
        )

2
仅作为一个侧记:我认为在一般情况下你不需要这一行 return db_field.formfield(**kwargs) - naktinis
我认为@naktinis是正确的,当您不使用它时,grappelli的autocomplete_lookup_fields可以正常工作。 - iskorum
谢谢 - 我同意并删除了这行代码。 - Danny W. Adair
如果在Inline类中使用,该块可以正常工作,但在ModelAdmin中使用时则没有效果。 - anno1337

0

如果您正在编辑的对象是新的,因为它应该设置为当前用户,只有在编辑对象时才显示字段,所以您可以重写模型的管理部分以不显示作者。

您可以通过覆盖ModelAdmin的get_form方法来实现此操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接