代码之家  ›  专栏  ›  技术社区  ›  JChao

将当前管理员用户设置为用户以保存在Django Admin表格行下的数据库中

  •  0
  • JChao  · 技术社区  · 6 年前

    我有一个 TabularInline 在我的管理页面下,我想阻止管理员编辑 submit_user 使其成为只读字段。

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

    我读过很多关于stackoverflow的文章,但没有一篇对我有用。许多人建议 save_formset 但这对我根本不起作用。数据库总是抱怨没有 提交用户 字段(如果是这种情况,则列具有映射到另一个表的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)
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   JChao    6 年前

    所以我作弊了,但解决了我的问题。因为表要求id而不是user对象,所以我传入 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)