Django Rest Framework AttributeError 'function' 对象在 router.register 中没有属性 'model'

标签 django python-3.x django-rest-framework

我使用 Django Rest Framework 尝试我的第一个 Django API。一切都很好,但我改变了一些东西并陷入了这个 AttributeError 并且不明白该怎么做。我的代码看起来像教程中的,现在是凌晨 4 点半,我真的需要帮助。 所以,
这是回调

    python3 manage.py makemigrations
Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/home/dev/test/demo/lib/python3.5/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
    utility.execute()
  File "/home/dev/test/demo/lib/python3.5/site-packages/django/core/management/__init__.py", line 365, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/dev/test/demo/lib/python3.5/site-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/dev/test/demo/lib/python3.5/site-packages/django/core/management/base.py", line 332, in execute
    self.check()
  File "/home/dev/test/demo/lib/python3.5/site-packages/django/core/management/base.py", line 364, in check
    include_deployment_checks=include_deployment_checks,
  File "/home/dev/test/demo/lib/python3.5/site-packages/django/core/management/base.py", line 351, in _run_checks
    return checks.run_checks(**kwargs)
  File "/home/dev/test/demo/lib/python3.5/site-packages/django/core/checks/registry.py", line 73, in run_checks
    new_errors = check(app_configs=app_configs)
  File "/home/dev/test/demo/lib/python3.5/site-packages/django/core/checks/urls.py", line 13, in check_url_config
    return check_resolver(resolver)
  File "/home/dev/test/demo/lib/python3.5/site-packages/django/core/checks/urls.py", line 23, in check_resolver
    return check_method()
  File "/home/dev/test/demo/lib/python3.5/site-packages/django/urls/resolvers.py", line 397, in check
    for pattern in self.url_patterns:
  File "/home/dev/test/demo/lib/python3.5/site-packages/django/utils/functional.py", line 36, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/home/dev/test/demo/lib/python3.5/site-packages/django/urls/resolvers.py", line 536, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "/home/dev/test/demo/lib/python3.5/site-packages/django/utils/functional.py", line 36, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/home/dev/test/demo/lib/python3.5/site-packages/django/urls/resolvers.py", line 529, in urlconf_module
    return import_module(self.urlconf_name)
  File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 665, in exec_module
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "/home/dev/test/demo/api_demo/api_demo/urls.py", line 7, in <module>
    router.register(r'developers', views.DevViewSet)
  File "/home/dev/test/demo/lib/python3.5/site-packages/rest_framework/routers.py", line 72, in register
    base_name = self.get_default_base_name(viewset)
  File "/home/dev/test/demo/lib/python3.5/site-packages/rest_framework/routers.py", line 152, in get_default_base_name
    return queryset.model._meta.object_name.lower()
AttributeError: 'function' object has no attribute 'model'

这是 url.py 文件

from django.conf.urls import url, include
from django.contrib import admin
from rest_framework import routers
from developers import views

router = routers.DefaultRouter()
router.register(r'developers', views.DevViewSet)

urlpatterns = [
    url(r'^admin', admin.site.urls),
    url(r'^api_demo', include(router.urls)),
]

这是views.py

from rest_framework.viewsets import ModelViewSet
from developers.models import Developers
from .serializers import DevSerializer


class DevViewSet(ModelViewSet):
    queryset = Developers.objects.all
    serializer_class = DevSerializer

和序列化器

from rest_framework import serializers
from .models import Developers

class DevSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Developers
        fields = ('name', 'surname', 'skills', 'education', 'employment_history')

和型号

from django.db import models


class Education(models.Model):
    university =  models.CharField(max_length=50)
    year_of_graduation = models.DateField()


class Empl_history(models.Model):
    company = models.CharField(max_length=50)
    role = models.CharField(max_length=30)
    fr = models.DateField(verbose_name='from')
    to = models.DateField()


class Developers(models.Model):
    name = models.CharField(max_length=50)
    surname = models.CharField(max_length=30)
    skills = models.ForeignKey('Skills', on_delete=models.CASCADE)
    education = models.ManyToManyField(Education)
    employment_history = models.ManyToManyField(Empl_history)


class Skills(models.Model):
    SKILLS_CHOICES = (
    ('p', 'Python'),
    ('d',  'Django'),
    ('drf', 'Django Rest Framework'),
    )
    skills_choices = models.CharField(max_length=2, choices=SKILLS_CHOICES,)

在设置中,我将“rest_framework”和“开发人员”添加到 INSTALLED_APPS,最后我还添加了此代码

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ),
    'PAGE_SIZE': 10
}

非常感谢任何建议和批评

最佳答案

对于 queryset 声明,您需要调用函数并返回 QuerySet,而不是将引用传递给函数,例如将 queryset = Developers.objects.all 更改为 queryset = Developers.objects.all()

from rest_framework.viewsets import ModelViewSet
from developers.models import Developers
from .serializers import DevSerializer


class DevViewSet(ModelViewSet):
    queryset = Developers.objects.all()
    serializer_class = DevSerializer

关于Django Rest Framework AttributeError 'function' 对象在 router.register 中没有属性 'model',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47784216/

相关文章:

django - 连接到 Django 测试数据库

django - Django的模型管理员只读权限在哪里?

python - 在条件下使用 Python 解析/提取嵌套的 JSON 数据

python - 如何使用 python 验证 mp4 文件或音频文件?

python - 智威汤逊中的 "detail : Invalid signature ."

python - django.db.utils.IntegrityError : (1062, "Duplicate entry for user_id")

jquery - 在 formset 中动态创建 django 表单,就像使用 jquery 在 django admin 中的内联表单一样

python - 缩短字符串

python - 使用 PyOpenGL 和 PyQt5 转换对象时出错

python - 无法登录我的 super 用户(自定义用户模型/经理)