在新的django db对象上创建许多对象

时间:2013-11-03 16:01:04

标签: django django-rest-framework

我正在使用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中创建对象时隐藏“tags”字段并将其显示在详细的序列化页面上?

1 个答案:

答案 0 :(得分: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获取此数据是不是一个坏主意?看起来有点脏...