Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何在tastypie中水合ToOneField和ToManyField_Django_Tastypie - Fatal编程技术网

Django 如何在tastypie中水合ToOneField和ToManyField

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的情况下,我

我有一些Tastype资源,我正在脱水,这样我可以在结果中返回资源的slug(名称),但我在重新水合它们时遇到了问题

我尝试了设置,例如,
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())