Aar*_*ier 5 python django django-contenttypes
我正在尝试添加两个组并授予他们访问我的 Django 项目的权限。但我不断收到错误消息:
ContentType 匹配查询不存在。
我正在运行:Django 1.5.4 Python 2.7.3 South 0.8.2 PostreSQL 9.3
这是我的代码:
import django
from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
from .models import Flavor
def add_groups():
# Create User Groups
special_users = Group(name='Special Users')
special_users.save()
really_special_users = Group(name='Super Special Users')
really_special_users.save()
def add_permissions():
# Define a View permission for the 1st group, and a View/Modify permission for the 2nd group
somemodel_ct = ContentType.objects.get(app_label='flavors', model='flavors_flavor')
can_view = Permission(name='Can View', codename='can_view_something', content_type=somemodel_ct)
can_view.save()
can_modify = Permission(name='Can Modify', codename='can_modify_something', content_type=somemodel_ct)
can_modify.save()
def give_perm_to_groups():
# Associate these two permissions now with a Group
special_users.permissions.add(can_view)
really_special_users.permissions = [can_view, can_modify]
Run Code Online (Sandbox Code Playgroud)
我可以正常运行 add_groups()。现在正在工作的是 add_permissions()。我相信这与 Postgres 中的装置有关,但不确定如何添加它们,或者这是否是确切的问题?
谢谢
这是整个错误回溯:
>>> add_permissions()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Users/Yuki_Aaron/Documents/djcode/demoproject/flavors/groups.py", line 16, in add_permissions
somemodel_ct = ContentType.objects.get(app_label='flavors', model='flavors_flavor')
File "/Users/Yuki_Aaron/Documents/virtualenvs/django1.5/lib/python2.7/site-packages/django/db/models/manager.py", line 143, in get
return self.get_query_set().get(*args, **kwargs)
File "/Users/Yuki_Aaron/Documents/virtualenvs/django1.5/lib/python2.7/site-packages/django/db/models/query.py", line 404, in get
self.model._meta.object_name)
DoesNotExist: ContentType matching query does not exist.
Run Code Online (Sandbox Code Playgroud)
我要做的第一件事是将其更改somemodel_ct为:
somemodel_ct = ContentType.objects.get(app_label='flavors', model='flavor')
Run Code Online (Sandbox Code Playgroud)
第二件事是,错误是由于以下事实造成的:我需要向模型添加权限,以便django.contrib.auth.models......Permission并且Group能够查找模型中定义的权限,然后关联回这ContentType。models.py这是我添加到我的代码中以使其正常工作的代码:
class Flavor(models.Model):
...
class Meta:
permissions = (
('can_view', 'Can View'),
('can_modify', 'Can Modify'),
)
Run Code Online (Sandbox Code Playgroud)
这样,我的Flavor模型就可以查找Permission表中的权限。这就是为什么它这么说,ContentType: no matching query因为我没有将其包含class Meta: permissions在我的实际Flavor模型中。
感谢您的帮助!
| 归档时间: |
|
| 查看次数: |
5742 次 |
| 最近记录: |