如何将Django Model上的属性(虚拟字段)公开为TastyPie ModelResource中的字段

Dan*_*nir 27 python django django-models tastypie

我有一个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)
Run Code Online (Sandbox Code Playgroud)

我的ModelResource是

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

然而,我目前摆脱tastypie api的是:

{
    gender: 'female',
    resource_uri: "/api/v1/userprofile/55/"
}
Run Code Online (Sandbox Code Playgroud)

我尝试过使用ModelResource中的fields属性,但这没有帮助.很想知道这里发生了什么.

Jam*_*esO 34

您应该能够将其定义为字段尝试:

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

编辑

您还必须包括:set readonly=Trueon your CharField,或者TastyPie将尝试在插入或更新时设置其值.

  • 这个领域有一种订购方式吗? (2认同)