我的管理页面下有一个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)
答案 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)