Я постоянно сталкиваюсь с этим шаблоном, и мне интересно, есть ли лучший способ справиться с этим. Многие мои модели рассматривают идею «создателя» - другими словами, я хочу, чтобы пользователь, создавший объект, был сохранен как создатель. Таким образом, мои модели почти всегда включают в себяДизайн Django Design - request.user в модели
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})
и проверка на POST, чтобы убедиться, что никто не dickered (вид сверху):
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