2013-10-09 30 views
3

我有一些django監護人的問題。我有一個消息模型中定義使用Django模型權限提出DoesNotExist錯誤

class News(models.Model): 
    title = models.CharField(_('Title'), max_length=255) 
    slug = models.SlugField(_('Slug'), unique_for_date='pub_date',) 

    objects = models.Manager() 
    featured = FeaturedNewsManager() 

    link = models.URLField(_('Link'), blank=True, null=True,) 

    class Meta: 
     permissions = (('view_news', _('view news'))) 

然後我嘗試了view_news權限分配給我的用戶之一,我得到以下錯誤:

>>> from guardian.shortcuts import assign_perm 
>>> g = Group.objects.latest('pk') 
>>> n = News.objects.get(pk=4) 
>>> assign_perm('news.view_news', g, n) 
Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
    File "/home/roberto/.virtualenvs/ve_news/local/lib/python2.7/site-packages/guardian/shortcuts.py", line 93, in assign_perm 
    return model.objects.assign_perm(perm, group, obj) 
    File "/home/roberto/.virtualenvs/ve_news/local/lib/python2.7/site-packages/guardian/managers.py", line 90, in assign_perm 
    permission = Permission.objects.get(content_type=ctype, codename=perm) 
    File "/home/roberto/.virtualenvs/ve_news/local/lib/python2.7/site-packages/django/db/models/manager.py", line 143, in get 
    return self.get_query_set().get(*args, **kwargs) 
    File "/home/roberto/.virtualenvs/ve_news/local/lib/python2.7/site-packages/django/db/models/query.py", line 404, in get 
    self.model._meta.object_name) 
DoesNotExist: Permission matching query does not exist. 

我試圖遷移我的應用程序但沒有按似乎無法解決我的問題。請幫忙嗎?

謝謝!

回答

5

嘗試做:

python manage.py syncdb --all 

或使自己的移民來處理新的權限(沒有與南防止遷移的自動創建的監護人權限的錯誤)

+0

酷,謝謝。有效! – sogeking

1

我相信執行syncdb沒這裏的訣竅。我想你的代碼在向列表添加更多權限時開始工作。

有此線錯誤:

permissions = (('view_news', _('view news'))) 

它應該是:

permissions = (('view_news', _('view news')),) 

注意沒有逗號。權限是有對實物(許可代碼權限說明

編輯的元組的元組:

我掉進同樣的陷阱一次。避免它的最好辦法是組織代碼,即使有一個權限如下:

permissions = (
    ('view_news', _('view news')), 
) 

之後,記得要做一次執行syncdb你如@foo黨所提及@sogeking

$ python manage.py syncdb 
+0

對不起,我已經在我的代碼中添加了逗號,但忘記編輯這裏的帖子:-) – sogeking

+0

但這是錯誤的原因,對吧? – Medeiros

+1

如果我記得不錯,我不得不重新運行syncdb以及@ foo-party建議。謝謝! :-) – sogeking