【问题标题】:Django Rest Framework url filter, import views errorDjango Rest Framework url 过滤器,导入视图错误
【发布时间】:2019-04-19 13:15:42
【问题描述】:

我目前无法通过 url 编写 Django Rest Framework 过滤数据。出于某种原因,问题似乎出在我导入视图时。错误指向在我在 urls.py 中添加 url 过滤器之前运行良好的模型

File "/home/jd_dhang/drf-demo/project/urls.py", line 5, in <module>
    from apps.core.views import SurgeryView
  File "/home/jd_dhang/drf-demo/project/apps/core/views.py", line 2, in <module>
    from .models import University, Student, SurgeryType
  File "/home/jd_dhang/drf-demo/project/apps/core/models.py", line 3, in <module>
    class University(models.Model):
  File "/home/jd_dhang/drf-demo/venv/lib/python3.5/site-packages/django/db/models/base.py", line 102, in __new__
    "INSTALLED_APPS." % (module, name)
RuntimeError: Model class apps.core.models.University doesn't declare an explicit app_label and isn't in an applica
tion in INSTALLED_APPS.

Django==1.9.13,djangorestframework==3.6.0

项目/urls.py

**from apps.core.views import SurgeryView**

urlpatterns = [
    **url(r'^api/surgery/(?P<surgery_type>.+)/$', SurgeryView.as_view())**,
    ...
]

project/apps/core/views.py

from rest_framework import viewsets
from .models import University, Student, SurgeryType
from .serializers import UniversitySerializer, StudentSerializer, SurgeryTypeSerializer

class StudentViewSet(viewsets.ModelViewSet):
...
class UniversityViewSet(viewsets.ModelViewSet):
...

class SurgeryView(viewsets.ModelViewSet): #(APIView):
    queryset = SurgeryType.objects.all()
    serializer_class = SurgeryTypeSerializer
    def get_queryset(self):
        queryset = SurgeryType.objects.all()
        surgery_type = self.kwargs['surgery_type']
        return SurgeryType.objects.filter(surgery_type=surgery_type)

如果有帮助,这里是我的模型

project/apps/core/models.py

from django.db import models

class University(models.Model):
    name = models.CharField(max_length=50)

    class Meta:
        verbose_name = "University"
        verbose_name_plural = "Universities"

    def __str__(self):
        return self.name

class Student(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    university = models.ForeignKey(University)

    class Meta:
        verbose_name = "Student"
        verbose_name_plural = "Students"

    def __str__(self):
        return '%s %s' % (self.first_name, self.last_name)

class SurgeryType(models.Model):
    surgery_type = models.CharField("surgery_type", max_length=200)
    sub_type = models.IntegerField(default=1)
    available = models.BooleanField()
    url = models.URLField(max_length=200, default='https://www.google.com')

    def __str__(self):
        return 'Type: ' + self.surgery_type + ' SubType : ' + str(self.sub_type)

谢谢

项目/conf/base.py

ALLOWED_HOSTS = ['*']

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'core',
    'rest_framework',
    'rest_framework_swagger'
]

【问题讨论】:

  • 您的应用是否包含在INSTALLED_APPS 中?
  • 请从相关设置文件中添加您的INSTALLED_APPS
  • 嗨,我已经添加了我的 INSTALLED_APPS

标签: python django django-rest-framework django-views


【解决方案1】:

修复 urls.py 中的导入。

应该是from core.views import SurgeryView 而不是from apps.core.views import SurgeryView

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 2016-04-29
    • 2018-11-25
    • 2019-04-21
    • 2019-02-12
    • 2016-04-25
    相关资源
    最近更新 更多