【问题标题】:Set current admin user as user to save in db under Django Admin TabularInline将当前管理员用户设置为用户以保存在 Django Admin TabularInline 下的数据库中
【发布时间】:2018-12-14 09:31:24
【问题描述】:

我的管理页面下有一个TabularInline,我想通过将submit_user 字段设为只读来防止管理员对其进行编辑。

但是在数据库中创建新条目时,我需要能够将当前用户作为submit_user 传递给

我已经阅读了很多关于 stackoverflow 的帖子,但没有一篇对我有用。许多人建议save_formset,但它根本不适合我。 db 总是抱怨没有submit_user 字段(如果这种情况,该列有一个映射到另一个表User 的 ForeignKey,并且抱怨是关于 user_id。认为有用户对象应该没问题,但它没有好像不是这样的。)

我的模型看起来像

class SomeTable(model.Model):
    submit_user = models.ForeignKey(User, db_column='user')
    data1 = models.CharField(max_length=200)
    create_date = models.DateTimeField(null=False, default=datetime.datetime.now)

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    所以我有点作弊但解决了我的问题。由于该表要求的是 id 而不是用户对象,所以我传入 request.user.id

    这就是它的样子

    instances = formset.save(commit=False)
    for i in instances:
        i.submit_user_id = request.user.id
        i.save()
    formset.save_m2m()
    

    编辑 1:

    这是我的答案的最终版本。我可以通过save_formset的重写成功地添加和删除条目

    def save_formset(self, request, form, formset, change):
        instances = formset.save(commit=False)
        for i in instances:
            if hasattr(i, 'submit_user_id') and not i.submit_user_id:
                i.submit_user_id = request.user.id
            i.save()
    
        formset.save_m2m()
        super(SomeModelAdmin, self).save_formset(request, form, formset, change)
    

    【讨论】:

    • 通过在def save_formset之后添加super(MerchantAdmin, self).save_formset(request, form, formset, change)解决
    猜你喜欢
    • 2023-04-10
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多