我有一个Django模型,如下所示:

class History(models.Model):
    TYPE_CHOICES = (
        (1, 'CREATE'),
        (0, 'EDIT'),
        (2, 'DELETE'),
    )
    user = models.ForeignKey(User, related_name='+')
    cp = models.ForeignKey('cp', related_name="history")
    field_name = models.CharField(max_length=192, null=False)
    old_value = models.CharField(max_length=500, null=True, blank=True)
    new_value = models.CharField(max_length=500, null=True, blank=True)
    type = models.IntegerField(default=0, choices=TYPE_CHOICES)
    date_created = models.DateTimeField(auto_now_add=True)


和资源(tastypie),

class HistoryResource(ModelResource):
    Id = fields.IntegerField('cp__id', null=True)
    username = fields.CharField('user__username', null=True)
    type_name = fields.CharField(attribute='type_name', null=True)

    class Meta:
        queryset = History.objects.all()

        def dehydrate_field_name(self, bundle):
            if bundle.data['field_name'] == 'category_a':
                return bundle.data['field_name'] = 'function'

        fields = ['id', 'type_name', 'Id', 'username', 'field_name', 'old_value',
                  'new_value', 'type', 'date_created']
        allowed_methods = ['get']


在我的脱水中,如果field_name的值是category_a,我想将field_name的值转换为function。但是它没有按预期工作。这是怎么回事?对好吃的东西/资源非常陌生。

最佳答案

为了进行自定义脱水,您需要扩展dehydrate方法,这意味着您的方法应称为dehydrate或由dehydrate方法调用。

然后,在您的方法中,您应该返回整个捆绑包,而不仅仅是返回更改后的键值对。

def dehydrate(self, bundle):
    if bundle.data['field_name'] == 'category_a':
        bundle.data['field_name'] = 'function'
    return bundle


参见趣味文档http://django-tastypie.readthedocs.org/en/latest/resources.html?highlight=dehydrate#Resource.dehydrate

09-05 18:05