1
我總是碰到這種模式,我想知道是否有更好的方法來處理它。我的很多模型都考慮到'創造者'的概念 - 換句話說,我想確保創建該對象的用戶被保存爲創建者。因此,我的模型幾乎總是包括Django Design Pattern - request.user in Model
creator = models.ForeignKey(User)
似乎有不被拖欠該用戶誰創造了它的用戶(request.user)的一種方式。因此,我發現自己建立的模型形式並添加創建者爲HiddenInput()
class MyModelForm(ModelForm):
class Meta:
model = MyModelForm
fields = ['name', 'creator']
widgets = {
'creator': HiddenInput()
}
,然後用初始
form = MyModelForm(initial={'creator': request.user})
結合的形式,在視圖中,檢查開機自檢,以確保沒有一個人討價還價與形式(全視圖):
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中執行它?
如果包括在形式的創造者,任何人都可以欺騙,並在瀏覽器中改變這一點) – Pol