Django how to raise validation error if foreignkey objects id change in hidden input

Viewed 159

I have an hidden foreigkey filed in my forms. I want to raise validation error or stop submitting forms if user try to change the value. here is my code:

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)

I want to raise validation error if current id change in hidden input. how to do that?

2 Answers

You can use validation in django form and check if gotten user profile id is not equal to current user id

First, pass user to form in your views.py:

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

Then use passed user in 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(...)
    

You can see more about form validation in

Simple, In your views.py

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

usually I prefer return instead of raise like

return JsonResponse
return redirect

mostly for error handling for same page

return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Related