如何在Django模型中将属性(虚拟字段)暴露为TastyPie ModelResource中的字段
我在Django模型中有一个属性,想通过TastyPie的ModelResource来展示这个属性。
我的模型是
class UserProfile(models.Model):
_genderChoices = ((u"M", u"Male"), (u"F", u"Female"))
user = Models.OneToOneField(User, editable=False)
gender = models.CharField(max_length=2, choices = _genderChoices)
def _get_full_name(self):
return "%s %s" % (self.user.first_name, self.user.last_name)
fullName = property(_get_full_name)
我的ModelResource是
class UserProfileResource(ModelResource):
class Meta:
queryset = models.UserProfile.objects.all()
authorization = DjangoAuthorization()
fields = ['gender', 'fullName']
但是现在从tastypie的API中得到的结果是:
{
gender: 'female',
resource_uri: "/api/v1/userprofile/55/"
}
我尝试过调整ModelResource中的fields属性,但没有什么效果。希望能搞明白这是怎么回事。
2 个回答
3
这是一个关于“去水分”的完整示例:
class UserResource(ModelResource):
fullname = fields.CharField(readonly=True)
class Meta:
queryset = auth_models.User.objects.all()
resource_name = 'user'
def dehydrate_fullname(self, bundle):
return u"{first_name} {last_name}".format(
first_name=bundle.obj.first_name, last_name=bundle.obj.last_name)
35
你应该可以把它定义为一个字段,试试这个:
class UserProfileResource(ModelResource):
fullname = fields.CharField(attribute='_get_full_name', readonly=True)
class Meta:
queryset = models.UserProfile.objects.all()
authorization = DjangoAuthorization()
fields = ['gender',]
编辑
你还需要在你的CharField
上加上:set readonly=True
,否则TastyPie会在插入或更新时尝试设置它的值。