Django как выдать ошибку валидации при изменении id объектов foreignkey в скрытом вводе

У меня есть скрытый foreigkey в моих формах. Я хочу вызвать ошибку валидации или остановить отправку формы, если пользователь попытается изменить значение. вот мой код:

html:

 {%for i in user_profile%}
       <input type="hidden" name='userprofile' value="{{i.id}}">
 {%endfor%}  

models.py:

class BlogComment(MPTTModel):
      userprofile= models.ForeignKey(UserProfile,on_delete=models.CASCADE,null=True,blank=True)
      #my others model fields...

views.py:

user_profile = UserProfile.objects.filter(user=request.user)

Я хочу выдать ошибку валидации при изменении текущего id в скрытом вводе. как это сделать?

Вы можете использовать валидацию в форме django и проверить, если полученный id профиля пользователя не равен текущему id пользователя

Сначала передайте пользователя форме в вашем views.py:

form = UserProfileForm(user=request.user)
...

Затем использовать переданного пользователя в forms.py:

from django import forms
from django.core.exceptions import ValidationError

class UserProfileForm(forms.Form):
    userprofile = IntegerField()
    ...

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user', None)
        super(MyForm, self).__init__(*args, **kwargs)

    def clean(self):
        if cleaned_data.get("userprofile") != self.user.id:
            raise ValidationError(...)
    

Подробнее о валидации форм вы можете прочитать в

Просто, в вашем файле views.py

user_profile = UserProfile.objects.get(user=request.user)
if user_profile.id != request.POST.get('userprofile'):
   raise ValidationError(...)

Обычно я предпочитаю return вместо raise, как

return JsonResponse
return redirect

в основном для обработки ошибок на одной странице

return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Вернуться на верх