我有一个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