我有一个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值转换为functional。但它没有按预期工作。这里有什么问题?对于tastypie /资源来说是非常新的。
答案 0 :(得分:1)
为了进行自定义脱水,您需要扩展dehydrate
方法,这意味着您的方法应该被调用dehydrate
或被dehydrate
方法调用。
然后,在您的方法中,您应该返回整个包,而不仅仅是更改的键值对。
def dehydrate(self, bundle):
if bundle.data['field_name'] == 'category_a':
bundle.data['field_name'] = 'function'
return bundle
请参阅tastypie docs http://django-tastypie.readthedocs.org/en/latest/resources.html?highlight=dehydrate#Resource.dehydrate