2

我有以下资源:

class MachineResource(ModelResource):
manager = fields.ToOneField(UserResource, 'manager',full=True)
class Meta:
    queryset = Service.objects.filter(service_type='machine')
    resource_name = 'machine'

这工作正常。并将返回一个机器列表,以及每个机器的嵌入式用户对象(管理器)。

但是,我只想要经理用户的 2-3 个字段。例如,我不希望它包含经理加盐通行证和其他私人数据。

据我所知,没有办法可以轻松做到这一点?

4

2 回答 2

2

只需查看django-tastypie 的快速入门部分。那里有一个完美的例子。当您ModelResourceUser(您的“经理”)定义子类时,只需将Meta具有exclude属性集的类添加到您不想显示的字段列表中。

class UserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'auth/user'
        excludes = ['email', 'password', 'is_superuser']
于 2011-12-07T22:06:09.673 回答
2

我个人觉得为同一个 Model 类创建两个 s 的想法ModelResource有点不雅。例如,假设您想在详细视图中显示电子邮件字段,UserResource但不想在作为MachineResource. 我解决问题的方法是删除dehydrate方法中嵌入对象的数据字典中非必需字段的键。也许有点hacky方式,但对我来说很好。对于您的情况,您可以执行以下操作:

class MachineResource(ModelResource):
    manager = fields.ToOneField(UserResource, 'manager',full=True)

    class Meta:
        queryset = Service.objects.filter(service_type='machine')
        resource_name = 'machine'

    def dehydrate(self,bundle):
        del bundle.data['manager'].data['email']
        return bundle
于 2013-03-23T19:13:02.197 回答