我使用 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/