我有以下资源:
class MachineResource(ModelResource):
manager = fields.ToOneField(UserResource, 'manager',full=True)
class Meta:
queryset = Service.objects.filter(service_type='machine')
resource_name = 'machine'
这很好用。并将返回一个机器列表,以及每个机器中的嵌入式用户对象(管理器)。
但是,我只想从经理用户那里得到2-3个字段。我不希望它包含管理员盐渍传递和其他私人数据,例如。
据我所知,我无法轻易做到这一点?
答案 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