我试图在Django 1.7上的数据迁移期间使用admin.LogEntry对象
该'django.contrib.admin'
应用程序已列出INSTALLED_APPS
.
在shell上,它的工作原理是:
>>> from django.apps import apps
>>> apps.get_model('admin', 'LogEntry')
django.contrib.admin.models.LogEntry
Run Code Online (Sandbox Code Playgroud)
但在迁移过程中,它失败了:
def do_it(apps, schema_editor):
LogEntry = apps.get_model('admin', 'LogEntry')
Run Code Online (Sandbox Code Playgroud)
失败如下:
django-admin migrate
(...)
LookupError: No installed app with label 'admin'.
Run Code Online (Sandbox Code Playgroud)
使用调试器,我得到了'admin'没有安装:
ipdb> apps.get_apps()
[]
ipdb> apps.all_models.keys()
['website', 'google', 'allauth', 'twitter', 'busca', 'conteudo', 'django_mobile', 'django_filters', 'videocenter', 'tinymce', 'oferta', 'programacaotv', 'contenttypes', 'suit', 'haystack', 'destaque', 'filer', 'galeria', 'auth', 'facebook', 'paintstore', 'critica', 'disqus', 'fichas', 'omeletop', 'autocomplete_light', 'modelsv1', 'temas', 'django_extensions', 'adv_cache_tag', 'taggit', 'social', 'personalidade']
Run Code Online (Sandbox Code Playgroud)
为什么??
我正在使用drf-nested-routers包构建嵌套API .
但是/domains/1/nameservers/
给了我所有的名字服务器,不仅仅是一个与域#1相关的名字服务器
我认为问题是我使用默认教程NameServerViewSet实现
class NameserverViewSet(viewsets.ModelViewSet):
queryset = Nameserver.objects.all()
serializer_class = NameserverSerializer
Run Code Online (Sandbox Code Playgroud)
请帮我正确编码.
以下是drf-nested-routers github页面的示例.
drf-nested-routers提供了嵌套路由器,可以在下面生成url模式
\ domain\< - 域名列表\域{pk}\< - 一个域名,来自{pk]
\ domain {domain_pk} \nameservers\< - 域的名称服务器
{domain_pk}\domain {domain_pk} \nameservers\{pk}\< - 来自{pk}的特定域名服务器,来自{domain_pk}的域名
这是一个例子:
# urls.py
from rest_framework_nested import routers
from views import DomainViewSet, NameserverViewSet
(...)
router = routers.SimpleRouter()
router.register(r'domains', DomainViewSet)
domains_router = routers.NestedSimpleRouter(router, r'domains', lookup='domain')
domains_router.register(r'nameservers', NameserverViewSet)
urlpatterns = patterns('',
url(r'^', include(router.urls)),
url(r'^', include(domains_router.urls)),
)
Run Code Online (Sandbox Code Playgroud)