2012-01-31 8 views
25

Bir TastyPie ModelResource aracılığıyla açığa çıkarmak istediğim bir Django Modelinde bir özelliğim var.Bir Django Modeli'nde bir özellik (sanal alan) bir TastyPie ModelResource alanı olarak nasıl gösterilir

{ 
    gender: 'female', 
    resource_uri: "/api/v1/userprofile/55/" 
} 

Birlikte oynamaya çalıştı adres:

Benim Modeli

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) 

Benim ModelResource

class UserProfileResource(ModelResource): 
    class Meta: 
     queryset = models.UserProfile.objects.all() 
     authorization = DjangoAuthorization() 
     fields = ['gender', 'fullName'] 

Ancak şu anda tastypie API gidiyorum bütün edilir olduğunu ModelResource'daki alanlar özelliği, ancak bu yardımcı olmadı. Burada neler olup bittiğini anlamak isterim.

+0

'u' kaçırmayın: return u "% s% s" % (self.user.first_name, self.user.last_name) – dzen

cevap

34

Bir field denemede olarak tanımlamak mümkün olmalıdır:

class UserProfileResource(ModelResource): 
    fullname = fields.CharField(attribute='_get_full_name', readonly=True) 
    class Meta: 
     queryset = models.UserProfile.objects.all() 
     authorization = DjangoAuthorization() 
     fields = ['gender',] 

Edit

Ayrıca eklemek zorunda: set readonly=True senin CharField üzerine veya TastyPie üzerindeki değerini ayarlamak için çalışacağız ekleme veya güncelleme.

+2

var Bu alandan sipariş vermenin bir yolu var mı? – anacarolinats

3

dihidrat ile tam bir örnek:

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) 
İlgili konular