如何在django-tastypie中使用full = True限制ToManyField中的字段

时间:2011-12-07 19:57:18

标签: django api tastypie

我有以下资源:

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

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

但是,我只想从经理用户那里得到2-3个字段。我不希望它包含管理员盐渍传递和其他私人数据,例如。

据我所知,我无法轻易做到这一点?

2 个答案:

答案 0 :(得分:1)

只需看看Quick Start section for django-tastypie即可。那里有一个完美的例子。在为ModelResource(您的“经理”)定义User子类时,只需添加一个Meta类,其中exclude属性设置为您不具有的字段列表想表现出来。

class UserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'auth/user'
        excludes = ['email', 'password', 'is_superuser']

答案 1 :(得分:1)

我个人觉得为同一个Model类创建两个ModelResource s的概念有点不优雅。例如,假设您希望在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