【发布时间】:2014-01-13 02:37:32
【问题描述】:
我一直遇到这种模式,我想知道是否有更好的方法来处理它。我的许多模型都考虑了“创建者”的想法——换句话说,我想确保创建对象的用户被保存为创建者。因此,我的模型几乎总是包含
creator = models.ForeignKey(User)
似乎没有办法将此用户默认为创建它的用户(request.user)。因此,我发现自己正在构建模型表单并将创建者添加为 HiddenInput()
class MyModelForm(ModelForm):
class Meta:
model = MyModelForm
fields = ['name', 'creator']
widgets = {
'creator': HiddenInput()
}
然后用initial绑定视图中的表单
form = MyModelForm(initial={'creator': request.user})
并检查 POST 以确保没有人对表单提出异议(完整视图):
def create(request):
form = MyModelForm(initial={'creator': request.user})
if request.method == 'POST':
if int(request.POST['creator']) != int(request.user.id):
return render(request,'500.html', {'message':'form tampering detected'})
form = FeedGroupForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('index'))
return render(request, 'mymodelformpage.html',{'form':form})
我对此很好,但这似乎是一种反模式。让我感到震惊的是,应该有一种方法可以默认模型中的创建者。
creator = models.ForeignKey(User, default=request.user)
或者在 post_save 中进行?
【问题讨论】:
-
如果您以任何人都可以作弊的形式包含创建者并在浏览器中更改)
标签: django