python - from - Cómo exponer una propiedad(campo virtual) en un Modelo Django como un campo en un TastyPie ModelResource
get data from api django (2)
Tengo una propiedad en un Modelo Django que me gustaría exponer a través de TastyPie ModelResource.
Mi modelo es
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)
Mi ModelResource es
class UserProfileResource(ModelResource):
class Meta:
queryset = models.UserProfile.objects.all()
authorization = DjangoAuthorization()
fields = [''gender'', ''fullName'']
Sin embargo, todo lo que estoy sacando de la sabia api es:
{
gender: ''female'',
resource_uri: "/api/v1/userprofile/55/"
}
He intentado jugar con la propiedad fields en el ModelResource, pero eso no ha ayudado. Me encantaría entender lo que está pasando aquí.
Debería poder definirlo como un intento de field :
class UserProfileResource(ModelResource):
fullname = fields.CharField(attribute=''_get_full_name'', readonly=True)
class Meta:
queryset = models.UserProfile.objects.all()
authorization = DjangoAuthorization()
fields = [''gender'',]
Editar
También debe incluir: set readonly=True
en su CharField
, o TastyPie intentará establecer su valor en la inserción o actualización.
Un ejemplo completo con deshidratado:
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)