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'))