【问题标题】:create django permissions, error: ContentType matching query does not exist创建django权限,报错:ContentType匹配查询不存在
【发布时间】:2013-11-15 16:26:42
【问题描述】:

我正在尝试添加两个组并授予他们对我的 Django 项目的权限。但我不断收到错误:

ContentType 匹配查询不存在。

我正在跑步: Django 1.5.4 Python 2.7.3 南 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]

我可以很好地运行 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.

【问题讨论】:

  • 你的模特叫flavors_flavor还是flavor

标签: python django django-contenttypes


【解决方案1】:

改变这一行:

somemodel_ct = ContentType.objects.get(app_label='flavors', model='flavors_flavor')

作者:

somemodel_ct = ContentType.objects.get(app_label='flavors', model='flavor')

指定型号时似乎有问题

【讨论】:

  • 来自django docsContentType模型字段->模型类的名称
  • 我把它改成了“风味”,但还是不行。这是新的回溯。任何建议:
  • >>> add_permissions() Traceback(最近一次调用最后):文件“”,第 1 行,在 文件“/Users/Yuki_Aaron/Documents/djcode/demoproject/flavors /groups.py”,第 16 行,在 add_permissions somemodel_ct = ContentType.objects.get(app_label='flavors', model='flavor') 文件“/Users/Yuki_Aaron/Documents/virtualenvs/django1.5/lib/python2. 7/site-packages/django/db/models/manager.py”,第 143 行,在 get return self.get_query_set().get(*args, **kwargs) File DoesNotExist: ContentType 匹配查询不存在。跨度>
  • 不要使用大写字母使用flavour而不是Flavour
【解决方案2】:

我要做的第一件事就是将somemodel_ct 更改为:

somemodel_ct = ContentType.objects.get(app_label='flavors', model='flavor')

第二件事是错误是由于我需要为我的模型添加权限,以便django.contrib.auth.models .... PermissionGroup 能够查找模型中定义的权限,然后关联回ContentType。这是我添加到我的models.py 以使其工作的代码:

class Flavor(models.Model):
...
    class Meta:
            permissions = (
                ('can_view', 'Can View'),
                ('can_modify', 'Can Modify'),
            )

这样,我的Flavor 模型可以在Permission 表中查找权限。这就是为什么它说ContentType: no matching query,因为我没有在我的实际Flavor 模型中包含class Meta: permissions

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2016-03-24
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多