2013-11-03 42 views
0

我正在使用Django-rest-framework並試圖向我的模型添加標籤。 數據庫端的每一件事都已準備就緒,但我如何在django-rest端做到這一點?在新鮮的django數據庫對象上創建多個對象

簡化,我的模型是這樣的:

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

我提出的標籤爲逗號列表Django的休息,以方便使用API​​來添加和更改標籤的人。但是,如何將標籤添加到尚不存在的對象呢?

在我的序列化程序中使用django-rest restore_object,我可以創建許多tomany對象的列表,但是如何將它們添加到django-rest attrs中,以便將它們添加到我的對象中?

總之,如何在django-rest restore_object函數中添加項目列表到.tags?

或者這是不可能的,我需要做handeling標籤 - 創建對象之後,爲此在django-rest中創建對象時隱藏「標籤」字段,並將其顯示在詳細的序列化程序頁面上?

回答

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抓取這些數據是不是一個好主意?看起來有點髒...