繁体   English   中英

如何在Django中设置模型限制

[英]How to set limit on models in Django

我有一点问题。 我想为我的应用程序中的用户设置限制。 例如:新用户注册并登录帐户后,只能添加一条记录。 添加后,如果同一用户要添加下一条记录,则该应用将返回警报“您仅允许添加一条记录”。 怎么解决呢?

您需要一种方法来记住用户是否使用了他们的限制。 我在这里知道2种选择:

  1. 向用户添加一个bool / int字段,以记住该用户是否创建了多少条记录。

这是迄今为止我找到的关于使用一些附加数据扩展用户模型的最佳教程: https : //simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html

  1. 或者,您可以在给用户的上述“记录”中创建外键(例如,称为“创建者”)。 从用户到记录的反向链接将为您提供该用户创建的记录。

无论哪种解决方案对您更有效,您都需要在创建视图中检查条件,如果超出限制(例如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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM