Python Django中编辑配置文件的限制

Python Django中编辑配置文件的限制,python,django,django-forms,Python,Django,Django Forms,如何设置用户编辑其个人资料的限制时间 例如,他们应该只有2次机会编辑地址。如果他们编辑地址2次,下次打开编辑页面时,此字段将被禁用 我的模型: class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.PROTECT, verbose_name='حساب کاربری') mobile = models.CharField('تلفن همراه', max_length=11

如何设置用户编辑其个人资料的限制时间

例如,他们应该只有2次机会编辑地址。如果他们编辑地址2次,下次打开编辑页面时,此字段将被禁用

我的模型:

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_编辑的变量添加到模型中

models.py

views.py

然后根据您使用的是内置模板引擎还是JS框架,在模板中或作为API的一部分使用禁用_编辑

编辑:这里有一种在后端检查它的方法

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
要将请求放入表单中,您需要在本博客中执行以下操作:


您可以阅读有关表单验证的更多信息

您可以共享当前的配置文件模型和更新视图吗?您只需在模型上有一个TimeEdit字段,该字段不包含在相应的表单中,但在编辑后手动更新,然后检查的值以确定是否禁用字段。@RobinZigmond我编辑了我的问题并添加了模型和视图。你能解释更多关于时间编辑的事情吗?谢谢,但我有个问题。假设我在模板中使用了disable_edits并禁用了字段,但用户只需从输入标记中删除属性“disabled”并更新它。。。所以我需要一个后端的验证器…`def\uuuu init\uuuuu self,*args,**kwargs:super.\uuuuu init\uuu*args,**kwargs self.fields['email'].disabled=True`例如,模型表单中的前面代码将禁用电子邮件字段,如果用户在浏览器中删除'disabled'属性并对其进行更新,新值将不会保存在数据库中。如何检查forms.py中“times_edited”字段的值?这应该更安全
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 })

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