我正在使用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”字段并将其显示在详细的序列化页面上?
答案 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获取此数据是不是一个坏主意?看起来有点脏...