【问题标题】:How to expose a property (virtual field) on a Django Model as a field in a TastyPie ModelResource如何将 Django 模型上的属性(虚拟字段)公开为 TastyPie ModelResource 中的字段
【发布时间】:2012-02-23 01:59:46
【问题描述】:

我想通过 TastyPie ModelResource 公开 Django 模型中的一个属性。

我的模特是

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)

我的模型资源是

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

但是,我目前从 sweetpie api 中得到的只是:

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

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

【问题讨论】:

  • 不要错过'u' :return u"%s %s" % (self.user.first_name, self.user.last_name)

标签: python django django-models tastypie


【解决方案1】:

您应该可以将其定义为field 尝试:

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 将尝试在插入或更新时设置其值。

【讨论】:

  • 有办法按这个字段排序吗?
【解决方案2】:

脱水的完整示例:

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)

【讨论】:

    猜你喜欢
    • 2012-07-21
    • 1970-01-01
    • 2014-01-12
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 2015-04-19
    相关资源
    最近更新 更多