[英]How to set limit on models in Django
我有一点问题。 我想为我的应用程序中的用户设置限制。 例如:新用户注册并登录帐户后,只能添加一条记录。 添加后,如果同一用户要添加下一条记录,则该应用将返回警报“您仅允许添加一条记录”。 怎么解决呢?
您需要一种方法来记住用户是否使用了他们的限制。 我在这里知道2种选择:
这是迄今为止我找到的关于使用一些附加数据扩展用户模型的最佳教程: https : //simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html
无论哪种解决方案对您更有效,您都需要在创建视图中检查条件,如果超出限制(例如PermissionDenied
),则会抛出错误。
您可以构建类似于此模型的模型,该模型定义每个用户的限制并使用classmethod
验证插入的数据:
class LimitedRecord(models.Model):
limits = 5
user = models.ForeignKey(User)
data = models.CharField(max_length=128)
@classmethod
def add_record(cls, user, data):
if not cls.can_add(user):
raise Exception('Not Allowed')
instance = cls.objects.create(user=user, data=data)
return instance
@classmethod
def can_add(cls, user):
return cls.objects.filter(user=user).count() <= cls.limits:
我在这里将登录分为两种方法,但是请确保您可以将它们合并到添加记录的同一单元中。
在User
模型中添加两个字段:
class User(models.Model):
n_records_permitted = models.PositiveIntegerField(default=1)
n_records_added = models.PositiveIntegerField(default=0)
现在,要么不显示具有user.n_records_added >= user.n_records_permitted
用户的相关表单,要么不将其包括在表单的验证中。
并且适当增加两个计数器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.