2013-11-15 54 views
4

我想添加兩個組併爲他們授予對我的Django項目的權限。但我不斷收到錯誤:創建django權限,錯誤:ContentType匹配查詢不存在

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中的fixture有關,但不知道如何添加它們,或者如果這是確切的問題?

感謝

這裏是整個錯誤回溯:

>>> 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. 
+0

你叫「flavors_flavor」或「flavor」嗎? – karthikr

回答

1

我必須做的第一件事就是改變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

感謝您的幫助!

2

改變這一行:

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

由:

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

這是當指定似乎有問題模型

+0

來自[django文檔](https://docs.djangoproject.com/en/1.6/ref/contrib/contenttypes/#the-contenttype-model):** ContentType模型字段 - >模型類的名稱** – juliocesar

+0

我將它改爲「Flavor」,但它仍然無效。這是新的回溯。任何建議: –

+0

>>> add_permissions() 回溯(最近通話最後一個): 文件 「」,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行,在得到 返回self.get_query_set()。get(* args,** kwargs) 文件 DoesNotExist:ContentType匹配查詢不存在。 –