【发布时间】:2020-03-20 10:47:07
【问题描述】:
我正在将 ModelViewSet 和 Modelserializer 用于类似项目的博客。
这可能是我理解实现的困难;我无法通过 通过路由器调用它 使 update 动作起作用,只有 list 动作在我定义的路由上起作用。
当我输入 url:127.0.0.1:8000/api/blogs/1,返回 ID 为 1 的博客编辑,它返回{"Detail": "Not Found."}。
这是我的看法:
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
我也重写了序列化器类中的save和update方法,不知道ModelSerializer中的ModelViewSet是否需要。
class ArticleSerializer(serializers.ModelSerializer):
def create(self, validated_data):
article = Article.objects.create(
article_title = self.validated_data['article_title'],
article_content = self.validated_data['article_content'],
...
)
return article
def update(self, instance, validated_data):
instance.article_title = validated_data.get('article_title', instance.article_title)
instance.article_content = validated_data.get('article_content', instance.article_content)
...
instance.save()
return instance
class Meta:
model = Article
fields = ...
还有urls.py 文件:
router = DefaultRouter()
router.register(r'blogs', ArticleViewSet, basename='articles-list')
urlpatterns = router.urls
我的问题是:
1. 如何为 ModelViewSet 动作指定 url(在我的例子中是 update 动作)?
2. 仅定义一个 url 是否足以满足我对 every ModelViewSet 操作的所有需求?如果有怎么办?
我做错了什么?我是 DRF 的新手。
【问题讨论】:
标签: django django-rest-framework