Pergunta

Eu estou tentando adicionar dois grupos e dar-lhes permissões para o meu projeto Django.Mas eu continuo recebendo a mensagem de erro:

ContentType correspondência de consulta não existe.

Eu estou executando:Django 1.5.4 Python 2.7.3 Do sul 0.8.2 PostreSQL 9.3

Aqui é o meu código:

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]

Eu posso executar add_groups() bem.É o add_permissions() que está trabalhando agora.Eu acredito que isso está relacionado a jogos no Postgres, mas não tem a certeza de como adicioná-los ou se esse é exatamente o problema?

Obrigado

Aqui é o conjunto de erro traceback:

>>> 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.
Foi útil?

Solução 2

A primeira coisa que eu tinha a fazer era mudar o somemodel_ct para:

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

A segunda coisa foi que o erro foi devido ao fato, de que eu precisava para adicionar permissões para o meu modelo, para que o django.contrib.auth.models .... Permission e Group para ser capaz de de olhar as permissões definidas no modelo e, em seguida, relacionam-se de volta para o ContentType.Aqui está o código que eu adicionei ao meu models.py para fazê-lo funcionar:

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

Desta forma, a minha Flavor o modelo pode olhar as permissões no Permission tabela.É por isso que ele disse: ContentType: no matching query porque eu não tinha incluído o class Meta: permissions na minha real Flavor modelo.

Obrigado por sua ajuda!

Outras dicas

Altere esta linha:

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

por:

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

É, parece ser um problema quando especificar o modelo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top