我是Django的新手,想要建立一个API服务器。
但是,当我注册ModelViewSet时,我得到了标题中显示的错误。
型号:
from django.db import models
from django.core.exceptions import ValidationError
class User(models.Model):
telegram_id = models.CharField(max_length=50)
mail = models.CharField(max_length=100, default="None")
password = models.CharField(max_length=100, default="None")
is_group = models.BooleanField(default=False)
priority = models.IntegerField(default=10)
max_watches = models.IntegerField(default=5)
current_watches = models.IntegerField(default=0)
notification_rate = models.IntegerField(default=3600)
watches = models.ManyToManyField('Url', through="Watch")
def save(self, *args, **kwargs):
if self.current_watches > self.max_watches:
raise ValidationError("Límite de enlaces alcanzado")
super().save(*args, **kwargs)
def __str__(self):
return self.telegram_id序列化程序:
from rest_framework import serializers
from hermes.models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = '__all__'ViewSet:
from rest_framework import viewsets
import hermes.models as models
import hermes.serializers.UserSerializer as UserSerializer
class UserViewSet(viewsets.ModelViewSet):
queryset = models.User.objects.all()
serializer_class = UserSerializer路由器:
from hermes.ViewSets import UserViewSet
from rest_framework import routers
router = routers.DefaultRouter()
router.register(r'users/', UserViewSet)应用程序中的路由器:
from django.contrib import admin
from django.urls import path, include
from hermes.urls import router
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include(router.urls))
]我还按照它的建议在路由器的末尾添加了基本名称参数,但再次失败,因为它没有属性get_extra_actions。当我定义该方法时,它仍然会引发相同的错误。我做错了什么?
发布于 2021-02-04 10:58:40
在视图集的定义中,删除模型并重定义,如下所示:
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()也不需要以'/‘结束你的url模式,可以去掉它,所以router.register(r'users/', UserViewSet)应该是:router.register(r'users', UserViewSet)
如果您看到根API,您会注意到有两个//否则
https://stackoverflow.com/questions/66012294
复制相似问题