问题描述
我有以下型号。
class Post(models.Model):
content = models.TextField()
class User(AbstractUser):
pen_name = models.Charfield()
我想限制用户创建特定数量的帖子(比如说10个),并且不能超过此数量。另外,我希望该权限在某个日期之前到期。
这些模型具有代表性,我的原始模型具有更多字段,并且需要更多权限。但是对于所有这些,我基本上都需要限制计数和到期日期。我想通过使用权限来获得许可功能。因此,用户可以购买许可证在一年内发布n个帖子。
对于DRF中的APIViews和Permissions_class,我该如何实现?
解决方法
您可以为自定义post_number
添加一个字段(User
),并且该字段可以是IntegerField
或PositiveIntegerField
,并且可以使其为limited。
How to create an expiration date in my django model?
class User(AbstractBaseUser,PermissionsMixin):
post_number = models.IntegerField()
expiration_date = models.DateTimeField()
more_restrictions = models.ManyToManyField(MyRestrictionModel)
# rest of your code...
要获得更多限制,您可以与MyRestrictionModel
建立联系,每当您向MyRestrictionModel
添加字段时,您的User
都会受到限制。
对于许可证,您可以创建许可证模型
class License(models.Model):
code = models.Charfield()
count = models.Integerfield()
#other fields for license information
然后您可以将许可证放在用户模型的ManyToManyField中
class User(models.Model):
...
licenses = models.ManyToManyField(License)
...
您还可以为M2M关系添加直通模型,以存储其他详细信息,例如许可证的购买日期,有效期,交易记录等。
然后在APIViews中可以使用DRF的自定义权限类
class MyPermissionClass(permissions.BasePermission):
def has_permission(self,request,view):
#process user's licenses to check permissions
class MyView(APIView):
permission_classes = [MyPermissionClass,]