python - Django Rest Framework - 编辑相关对象集
问题描述
我的 Django 项目中有一个列表系统,其中包含一个将sTag
列表附加到. 每个对象都有自己的标准,传递给. 我当前编辑或创建标签的方式是通过 a或to 。理想情况下,我会通过使用. 我在下面提供了我的代码的稍微简化的版本。Tag
Listing
Viewset
router.register()
POST
PATCH
/tags/
PATCH /listings/[id]/
{"tags": [{"type": "foo", "text": "bar"}]}
序列化程序.py
class NestedTagSerializer(serializers.ModelSerializer):
class Meta:
model = Tag
fields = ['text', 'type']
class ListingSerializer(serializers.ModelSerializer):
tags = NestedTagSerializer(many=True, read_only=False)
class Meta:
model = Listing
fields = ['tags', 'title', 'id']
模型.py
class Listing(models.Model):
title = models.CharField(max_length=255)
description = models.TextField()
class Tag(models.Model):
listing = models.ForeignKey(Listing, on_delete=CASCADE)
text = models.CharField(max_length=255)
type = models.CharField(max_length=255)
有没有一个很好的方法来使用 Django Rest Framework 来做到这一点?
解决方案
我之前遇到过类似的问题,对我来说,路由是主要问题。
实现嵌套路由,可以使用drf-extensions
网址.py
from rest_framework import routers
from rest_framework_extensions.routers import NestedRouterMixin
class NestedDefaultRouter(NestedRouterMixin, routers.DefaultRouter):
pass
router = NestedDefaultRouter()
listing_router = router.register('listings/', ListingView)
tag_router = listing_router.register('tags', TagView, basename='tags', parents_query_lookups=['listing_id']
urlpartterns = router.urls
它将生成如下网址:
/listings/ ListingView listing-list
/listings/<parent_lookup_listing_id>/tags/ TagView listing-tags-list
/listings/<parent_lookup_listing_id>/tags/<pk>/ TagView listing-tags-detail
/listings/<parent_lookup_listing_id>/tags/<pk>\.<format>/ TagView listing-tags-detail
/listings/<parent_lookup_listing_id>/tags\.<format>/ TagView listing-tags-list
parent_lookup_listing_id将用于确定列表
listing_id = self.kwargs.get('parent_lookup_listing_id')
推荐阅读
- java - 语法问题。如何以与我在评论底部填充双精度数组的方式相同的方式填充双精度列表
- tomcat - 无法在tomcat 8中登录管理器应用程序
- r - 用空格 pt2 替换所有分号
- python - 如何为两个矩阵创建卷积函数?
- c++ - 向 vulkan 管道添加额外的 UBO 会停止所有几何渲染
- electron - 无法在 mac 和 windows 上为电子 5.0.10 安装 node-libcurl
- c# - 如何在 C# 中插入具有某些因素的数组?
- url-rewriting - IIS 10 - URL 重写规则以阻止对 servername 的直接请求,但来自 SOAPUI 的请求除外
- spring-boot - 服务同步问题
- php - Generate Word File in Laravel PHPWord - problem with add blade