2012-01-31 20 views
25

我在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屬性,但沒有幫助。很想了解這裏發生了什麼。

+0

不要錯過 'U':返回U 「%s%S」 %(self.user.first_name,self.user.last_name) – dzen 2013-02-22 13:01:00

回答

34

你應該能夠將其定義爲一個field嘗試:

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

編輯

你還必須包括:set readonly=TrueCharField,或TastyPie將嘗試在其值設置插入或更新。

+2

有一種通過這個領域來訂購的方式? – anacarolinats 2013-03-06 21:02:57

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) 
相關問題