首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Django中设置模型限制

如何在Django中设置模型限制
EN

Stack Overflow用户
提问于 2018-02-18 01:07:35
回答 3查看 840关注 0票数 0

我有个小问题。我想在我的应用程序中设置用户限制。例如:新用户注册并登录其账户后,只能添加一条记录。添加后,如果同一用户想要添加下一条记录,应用程序将返回警告“您被允许仅添加一条记录”。如何解决?

EN

回答 3

Stack Overflow用户

发布于 2018-02-18 01:14:33

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

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

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

  1. Alternatively,你可以在前面提到的“记录”中为用户创建一个外键(例如,称为“创建者”)。从用户到记录的反向链接将为您提供此用户创建的记录。

无论哪种解决方案更适合您,您都需要检查创建视图中的条件,如果超出限制,则抛出错误(例如PermissionDenied)

票数 2
EN

Stack Overflow用户

发布于 2018-02-18 04:52:02

您可以构建与此类似的模型,该模型定义每个用户的限制并使用classmethod验证插入的数据

代码语言:javascript
运行
复制
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:

我在这里将登录分成了两个方法,但您可以将它们组合到添加记录的同一单元中。

票数 1
EN

Stack Overflow用户

发布于 2018-02-18 01:15:04

User模型添加两个字段:

代码语言:javascript
运行
复制
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的用户显示相关表单,要么在表单验证中包含此检查。

并且适当地增加两个计数器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48843780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档