Django:通过参数序列化具有多对多关系的模型
Posted
技术标签:
【中文标题】Django:通过参数序列化具有多对多关系的模型【英文标题】:Django: Serialize a model with a many-to-many relationship with a through argument 【发布时间】:2017-06-18 00:36:25 【问题描述】:模型定义了一个文章和一个作者类。它们以多对多的关系联系在一起。这种关系是通过自定义中间表定义的:
# models.py
class Article(models.Model):
title = models.CharField(max_length=500)
authors = models.ManyToManyField(Author, through='AuthorOrder')
class Author(models.Model):
name = models.CharField(max_length=255)
class AuthorOrder(models.Model):
author = models.ForeignKey(Author)
article = models.ForeignKey(Article)
writing_order = models.IntegerField()
序列化应该返回一个像这样的 JSON:
#articles_json
"fields":
"title": "A title",
"authors": [
"name":"Author 1",
"writing_order": 1
,
"name":"Author 2",
"writing_order": 2
我已经确定了两种解决方案。
This one 建议单独序列化 AuthorOrder 字段。 第二个是use the Django Rest Framework。我尝试了这两个但没有成功。你知道另一种方法吗?
【问题讨论】:
“使用 DRF”是正确的做法,但这不是解决方案。您希望序列化数据采用什么格式? “但没有成功”将是您应该提供更多详细信息(您是如何做到的以及错误是什么)以使其成为真正的 SO 问题的地方。 DRF 见***.com/questions/19180242/… 【参考方案1】:感谢您的反馈,我专注于 Django REST 框架并且它有效。以下是我编写的自定义序列化程序:
# serializers.py
from rest_framework import serializers
from app.models import Article, AuthorsOrder
class AuthorsOrderSerializer(serializer.ModelSerializer):
author_name = serializers.ReadOnlyField(source='author.name')
class Meta:
model = AuthorsOrder
fields = ('writing_order', 'author_name')
class ArticleSerializer(serializer.ModelSerializer):
authors = AuthorsOrderSerializer(source='authorsorder_set', many=True)
class Meta:
model = Article
fields = ('title', 'authors')
来源:
-
Include intermediary (through model) in responses in Django Rest Framework
https://bitbucket.org/snippets/adautoserpa/MeLa/django-rest-framework-manytomany-through
【讨论】:
但这并没有按照正确的顺序给出作者,是吗? 是的。感谢 AuthorsOrderSerializer 实例。 “authorsorder_set”从何而来?? 嗨@pzijd,在这里,作者姓名应该是:title: "some title, authors: ["name": "some name 1", "name": "some name 2"]
我们可以有类似的东西:["title": "some title", "author_name": "some name 1", "title": "some title", "author_name": "some name 2"]
以上是关于Django:通过参数序列化具有多对多关系的模型的主要内容,如果未能解决你的问题,请参考以下文章
图书管理的图书增删改查choices参数MTV与MVC模型多对多关系的三种创建方式Ajax操作前后端传输数据编码格式ajax发送json格式数据ajax发送文件django自带的序列化
图书管理的图书增删改查choices参数MTV与MVC模型多对多关系的三种创建方式Ajax操作前后端传输数据编码格式ajax发送json格式数据ajax发送文件django自带的序列化