Django 如何在tastypie中水合ToOneField和ToManyField
我有一些Tastype资源,我正在脱水,这样我可以在结果中返回资源的slug(名称),但我在重新水合它们时遇到了问题 我尝试了设置,例如,Django 如何在tastypie中水合ToOneField和ToManyField,django,tastypie,Django,Tastypie,我有一些Tastype资源,我正在脱水,这样我可以在结果中返回资源的slug(名称),但我在重新水合它们时遇到了问题 我尝试了设置,例如,bundle.data['profile']={'name':bundle.data['profile']},但我无法实现,它看起来需要所有数据来构建对象,而不仅仅是一些字段 在本例中,hydrome\u profile起作用,但它取决于要加载的bundle.obj.profile。我不确定我是否能一直这样认为 在deterhemate_roles的情况下,我
bundle.data['profile']={'name':bundle.data['profile']}
,但我无法实现,它看起来需要所有数据来构建对象,而不仅仅是一些字段
在本例中,hydrome\u profile
起作用,但它取决于要加载的bundle.obj.profile
。我不确定我是否能一直这样认为
在deterhemate_roles
的情况下,我不知道应该返回什么,返回模型列表或查询集不起作用,看起来正确的做法(在两种方法中)是返回正确的资源uri,在这两种情况下,但是我不知道如何在没有太多硬编码的情况下构建它:我需要从字段(或者至少从资源类)中检索原始模型类,以便获取对象,获取对象的PK,然后构建uri。。听起来太牵强了
那么:我应该怎么做?我的hydrome\u配置文件
实现正确吗,还是它会咬我的屁股?我应该在角色中返回什么
class MinionResource(ModelResource):
"""
Resource for :models:`inventory.minions.models.Minion`
"""
roles = fields.ToManyField(RoleResource, 'roles')
profile = fields.ForeignKey(clouds_api.CloudProfileResource, 'profile')
class Meta:
queryset = models.Minion.objects.all()
resource_name = 'minion/minion'
filtering = {
'id': ALL,
'name': ALL,
'roles': ALL_WITH_RELATIONS,
'profile': ALL_WITH_RELATIONS,
}
def dehydrate_profile(self, bundle):
return bundle.obj.profile.name
def hydrate_profile(self, bundle):
bundle.data['profile'] = bundle.obj.profile
return bundle
def dehydrate_roles(self, bundle):
return list(bundle.obj.roles.all().values_list('name', flat=True))
我不能确切地回答什么是正确的,但据我所知,在轮廓部分,当您创建尚未链接轮廓的新对象时,您将遇到问题
然而,我经常做的只是定义我是否需要信息
class MinionResource(ModelResource):
roles = fields.ToManyField(RoleResource, 'roles', full=True)
profile = fields.ForeignKey(clouds_api.CloudProfileResource, 'profile', full=True)
这应该已经足够了。然而,如果你不喜欢这样,你可以这样做
class MinionResource(ModelResource):
roles = fields.ListField()
profile = fields.ForeignKey(clouds_api.CloudProfileResource, 'profile', full=True)
def dehydrate_roles(self, bundle):
return map(str, bundle.obj.roles.all())