Django和Tastypie,覆盖OnToMany字段中的特定字段

时间:2014-10-24 04:27:06

标签: python django tastypie

我们有一个旧版本的移动应用,如果无法匹配某个字段,则会崩溃。它是API的早期版本 - 所以我只需要将API中的单一用法覆盖到旧版应用程序的安全值。 (我无法更改新应用程序的数据库中的值。)

经过多次研究后,我发现使用脱水并正确设置值。我的控制台中的值正在更改 - 但是,浏览器输出不会获取更改。我有点难过。

这是完整的模型资源。请原谅我的蟒蛇 - 虽然我是一个巨大的粉丝 - 但这不是我正常的踩踏地。

class SectionResource(ModelResource):

   articles = fields.ToManyField('app.api.ArticleResource', "articles_sections", null=True, full=True)

   class Meta:
       queryset = Section.objects.all()
       resource_name = "sections"
       filtering = {
           'id': ['exact'],
       }

   def dehydrate(self, bundle):

        for i in range(len(bundle.data['articles'])):

            if bundle.data['articles'][i].obj.template == "Program":

                 bundle.data['articles'][i].obj.template = "Template"

                 #print bundle.data['articles'][i].obj.template #updated in print but not browser

        return bundle

1 个答案:

答案 0 :(得分:0)

您确实打印的是您要分配的相同内容,但文章是否有要序列化的obj属性?

您提出修复的版本:

def dehydrate(self, bundle):

    for i in range(len(bundle.data['articles'])):

        if bundle.data['articles'][i]["template"] == "Program":

             bundle.data['articles'][i]["template"] = "Template"

    return bundle

修正了重写版本:

def dehydrate(self, bundle):

    for article in filter(lambda a: a.get("template") == "Program", bundle.data.get('articles', [])):
        article["template"] = "Template"

    return bundle