簡體   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