Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何限制用户在django中保存数据库?_Python_Mysql_Django_Django Models_Django Mysql - Fatal编程技术网

Python 如何限制用户在django中保存数据库?

Python 如何限制用户在django中保存数据库?,python,mysql,django,django-models,django-mysql,Python,Mysql,Django,Django Models,Django Mysql,如何限制用户在db中保存对象 class model_name(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True) user = models.ForeignKey(User) foo = models.CharField(max_length=51) 我想将foo限制为每个用户只能输入10个条目 我正在使用mysql作为后端你可以做的 class

如何限制用户在db中保存对象

class model_name(models.Model):
   id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True)
   user = models.ForeignKey(User)
   foo = models.CharField(max_length=51)
我想将foo限制为每个用户只能输入10个条目

我正在使用mysql作为后端

你可以做的

class model_name(models.Model):
   id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True)
   user = models.ForeignKey(User)
   foo = models.CharField(max_length=51)

   def save(self, *args, **kwargs):
       if self.__class__.objects.filter(user=self.user).count()>=10:
           return None
       return super(model_name, self).save(*args, **kwargs)
       #return super().save(*args, **kwargs) python3.x
如果您正在使用
forms
,则可以通过更新
Form.clean
方法来执行相同的操作

def clean(self):
    super(MyForm, self).clean()
    if model_name.objects.filter(user=self.cleaned_data['user']).count()>=10:
           raise forms.ValidationError("You have exceeded limit.")
你能行

class model_name(models.Model):
   id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True)
   user = models.ForeignKey(User)
   foo = models.CharField(max_length=51)

   def save(self, *args, **kwargs):
       if self.__class__.objects.filter(user=self.user).count()>=10:
           return None
       return super(model_name, self).save(*args, **kwargs)
       #return super().save(*args, **kwargs) python3.x
如果您正在使用
forms
,则可以通过更新
Form.clean
方法来执行相同的操作

def clean(self):
    super(MyForm, self).clean()
    if model_name.objects.filter(user=self.cleaned_data['user']).count()>=10:
           raise forms.ValidationError("You have exceeded limit.")

如果您使用postgre作为后端数据库,您可以使用类似的东西。对于这些阵列,cou可以控制长度、内容等。我使用mysql作为后端是的,已经注意到了,我的缺点。也许你可以根据自己的需求等切换底层数据库。你总是可以选择执行代码,因此这对你来说也是一个有用的黑客。是否有任何方法可以在forms.py中进行验证如果你想在form.py中实现它,我想最直观的方法是在用户插入/更新foo之前检查db中foo的数量。如果记录数>10,则向用户响应错误消息。如果您使用postgre作为后端数据库,则可以使用以下内容。对于这些阵列,cou可以控制长度、内容等。我使用mysql作为后端是的,已经注意到了,我的缺点。也许你可以根据自己的需求等切换底层数据库。你总是可以选择执行代码,因此这对你来说也是一个有用的黑客。是否有任何方法可以在forms.py中进行验证如果你想在form.py中实现它,我想最直观的方法是在用户插入/更新foo之前检查db中foo的数量。如果记录数>10,则向用户响应错误消息。我已在表单中尝试,但它不会显示验证error@brunodesthuilliers是的,我的意思是:)。你在渲染表单吗?是管理员吗?我试过表单,但它不会显示验证error@brunodesthuilliers是的,我的意思是:)。你在渲染表单吗?是管理员吗?