[英]limitaion for editing profile in Django
如何设置用户编辑个人资料的限制时间?
例如,他们应该只有 2 次编辑地址的机会。 如果他们编辑地址 2 次,则下次打开编辑页面时该字段将被禁用。
我的 model:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.PROTECT, verbose_name='حساب کاربری')
mobile = models.CharField('تلفن همراه', max_length=11, null=True, blank=True)
address = models.TextField('آدرس', null=True, blank=True, max_length=5000)
并查看:
def profile_edit(request):
if request.method != 'POST':
profile_form = ProfileForm(instance=request.user.profile)
user_form = UserForm(instance=request.user)
else:
profile_form = ProfileForm(data=request.POST, files=request.FILES, instance=request.user.profile)
user_form = UserForm(data=request.POST, instance=request.user)
if profile_form.is_valid() and user_form.is_valid():
profile_form.save()
user_form.save()
return redirect('accounts:profile_details')
return render(request, 'accounts/profile_edit.html', {'profile_form': profile_form, 'user_form': user_form})
将times_edited
变量添加到您的 model。
模型.py
class Profile:
user = models.OneToOneField(User, on_delete=models.PROTECT, verbose_name='حساب کاربری')
mobile = models.CharField('تلفن همراه', max_length=11, null=True, blank=True)
address = models.TextField('آدرس', null=True, blank=True, max_length=5000)
times_edited = models.IntegerField(default=0)
视图.py
def profile_edit(request):
if request.method != 'POST':
profile_form = ProfileForm(instance=request.user.profile)
user_form = UserForm(instance=request.user)
disable_edits = False
if request.user.profile.times_edited > 2:
disable_edits = True
else:
profile_form = ProfileForm(data=request.POST, files=request.FILES, instance=request.user.profile)
user_form = UserForm(data=request.POST, instance=request.user)
if profile_form.is_valid() and user_form.is_valid():
profile_form.save()
user_form.save()
request.user.profile.times_edited = request.user.profile.times_edited + 1
return redirect('accounts:profile_details')
return render(request, 'accounts/profile_edit.html', {'profile_form': profile_form, 'user_form': user_form, 'disable_edits': disable_edits })
然后在您的模板中或作为 API 的一部分使用disable_edits
(取决于您使用的是内置模板引擎还是 JS 框架)。
编辑:这是一种在后端检查它的方法
def clean_email(self):
email = self.cleaned_data['email']
if User.objects.get(pk=request.user.pk).profile.times_edited > 2:
raise ValidationError("Email can no longer be edited")
return User.objects.get(pk=request.user.pk).email
要将请求放入您的表单,您需要在此博客中执行以下操作:
https://brunobastos.net/how-to-access-the-httprequest-object-in-django-forms/
您可以在此处阅读有关表单验证的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.