只需要在Model 里的 Meta 类里面增加 permissions,然后执行
python manage.py makgemigrations
python manage.py migrate
就会在 auth_permission 表中增加实例。同时在 admin 页面为指定的用户,增加相应的权限即可。(也可以通过 Navicat 直接操作数据库,不过这有点不太高明!)
D:\xxx\djangoTest\robappdj\TestModel\models.py
class BankContact(models.Model):
mobile = models.CharField(max_length=20)
address = models.CharField(max_length=20)
account = models.OneToOneField("BankAccount")
class Meta(object):
db_table = 'back_contact'
# Create move_bankcontact permission instance manually in poc_permission_required view function
permissions = (('move_bankcontact', 'Can move bank contact'),)
def __unicode__(self):
return "{0}-{1}".format(self.mobile, self.address)
@permission_required('TestModel.delete_bankcontact') --- 是 Django 框架为每个 model 默认生成的权限
def poc_permission_required(request):
return HttpResponse('In the poc_permission_required')
当然上面的 创建自定义的权限 和 给指定用户赋予权限 等一系列过程都可以通过自己的代码来实现。
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
# 1. 创建自定义的权限
content_type = ContentType.objects.get_for_model(BankContact)
premission = Permission.objects.create(codename='copy_bankcontact',name='Can copy bank contact',content_type=content_type)
# 2. 为指定用户赋予权限
User = get_user_model()
user_obj = User.objects.get(username=request.user.username)
# # user_obj.user_permissions.add(premission)
user_obj.user_permissions.add(Permission.objects.get(id=94))
其实说白了:
执行 python mange.py migrate 就是向数据库里写入数据,而上面的 ORM 代码也是向数据库里写入数据