将当前管理员用户设置为要保存在Django Admin TabularInline下的数据库中的用户

时间:2018-07-05 20:08:25

标签: django django-admin

我的管理页面下有一个TabularInline,并且我想通过将其设置为只读来阻止管理员编辑submit_user字段。

但是,在数据库中创建新条目时,我需要能够以submit_user的身份传递当前用户

我已经阅读了许多关于stackoverflow的帖子,但是没有一个适合我。许多人建议使用save_formset,但这根本不适合我。 db总是抱怨没有submit_user字段(在这种情况下,该列具有映射到另一个表User的ForeignKey,并且抱怨是关于user_id的。认为有user对象应该没问题) ,但事实并非如此。)

我的模特看起来像

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 个答案:

答案 0 :(得分:0)

所以我有点被骗了,但是解决了我的问题。由于该表要求输入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)