0

我正在使用 Django-rest-framework 并尝试将标签添加到我的模型中。数据库端的一切都准备好了,但是在 django-rest 端我该如何做呢?

简化后,我的模型如下所示:

name = models.CharField()
tags = models.ManyToManyField(Tags)

我在 django-rest 中将标签显示为逗号列表,以方便人们使用 API 添加和更改标签。但是,如何将标签添加到尚不存在的对象?

在我的序列化程序中使用 django-rest restore_object ,我可以创建多对象列表,但是如何将它们添加到 django-rest attrs 以便将它们添加到我的对象中?

简而言之,如何在 django-rest restore_object 函数中向 .tags 添加项目列表?

或者这是不可能的,我需要在创建对象之后进行标签处理,因此在 django-rest 中创建对象时隐藏“标签”字段并将其显示在详细的序列化程序页面上?

4

1 回答 1

0

我不确定这是否是最好的方法,但这似乎可以覆盖序列化程序中的 save_object 方法。

def save_object(self, obj, **kwargs):
    super(MySerializer, self).save_object(obj, **kwargs)

    tags = self.init_data.get('tags', None)
    if tags:
        obj.tags.clear()
        tags = tags.split(',')
        for t in tags:
            tag_obj, created = Tag.objects.get_or_create(name=t, owner=self.context['request'].user)
            obj.tags.add(tag_obj)

从 init_data 中获取这些数据是不是一个坏主意?好像有点脏……

于 2013-11-03T19:50:01.010 回答