django - 如何在 Django REST Framework Mongoengine 中序列化 EmbeddedDocumentListField?

标签 django django-rest-framework

我正在发送一个 API post 请求,在请求正文中包含以下内容(转换为 JSON 字符串),以将其序列化为 BookCollection 文档,其中书籍作为嵌入式文档列表持久化:

{
    'author': '<author_id>',
    'books': [
        {
            'title': 'Grapes of Wrath',
            'note': 'More to be ordered.',
            'created': '2016-03-11T17:59:01.054Z'
        }
    ]
}

View .py:
def post(self, request, *args, **kwargs):
    serializer = BookCollectionSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.errors,
                    status=status.HTTP_400_BAD_REQUEST)

模型.py:
class Book(EmbeddedDocument):
    title = StringField(required=True, max_length=50)
    note = StringField(required=False, max_length=2000)
    created = DateTimeField(required=True,
                            default=datetime.datetime.now())


class BookCollection(Document):
    author = ReferenceField(Author, required=True)
    books = EmbeddedDocumentListField(Book, required=False)

序列化程序.py
class BookSerializer(EmbeddedDocumentSerializer):

    class Meta:
        model = Book
        depth = 2


class BookCollectionSerializer(DocumentSerializer):
    author = ReferenceField(Author)
    books = BookSerializer(Book, many=True)

    class Meta:
        model = BookCollection
        depth = 2

    def create(self, validated_data):
        books = validated_data.pop('books')
        book_collection = BookCollection.objects.create(**validated_data)
        book_collection.books = []
        for book in books:
            book_collection.books.append(book)
        book_collection.save()
        return book_collection

当我运行 post 请求时,BookCollection 对象确实被持久化了;但是,书籍列表(嵌入文档的列表)并未保留在 BooksCollection 中。它只是设置为一个空白列表 []。我在这里做错了什么?我还尝试从 create() 方法中删除逻辑,但这没有帮助。谢谢!

最佳答案

我发现了问题——这是一个愚蠢的错误。我没有将 API 发布请求内容类型设置为 application/json。一旦我设置了它,它就完美无缺地工作了。

关于django - 如何在 Django REST Framework Mongoengine 中序列化 EmbeddedDocumentListField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36073228/

相关文章:

javascript - Django 休息 : AJAX Post is not working, 400 响应

sql - Django ORM 在注释多个聚合列时删除不需要的组

python - Django REST Framework 部分深度更新

python - Django:使用GET(而不是PATCH)更新特定字段

Django:从 Pandas 到 Django Rest Framework 的模型查询集

python - South 在不同的应用程序中遵循什么迁移顺序?

Django PostgreSQL JSONField db_index 错误

Django(使用TokenAuthentication): "non_field_errors": "Unable to log in with provided credentials?

python - Django 使用 Django Rest Framework 创建自定义用户

django - 在 docker 微服务设置中运行 django rq 的正确方法