Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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
Python 我如何获得一个Django Rest框架,其中包含一个子查询,该子查询与子项相关,可以正常工作?_Python_Django_Django Rest Framework - Fatal编程技术网

Python 我如何获得一个Django Rest框架,其中包含一个子查询,该子查询与子项相关,可以正常工作?

Python 我如何获得一个Django Rest框架,其中包含一个子查询,该子查询与子项相关,可以正常工作?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个模型看起来有点像这样: 数据集 类数据集(ClusterableModel): group=models.ForeignKey(数据组,在_delete=models.CASCADE上,相关的_name='dataset')) is_public=models.BooleanField(默认值=False) title=models.CharField(最大长度=255) name=models.CharField(最大长度=255,唯一性=True) 数据组 类数据组(models.

我有一个模型看起来有点像这样:

数据集

类数据集(ClusterableModel):
group=models.ForeignKey(数据组,在_delete=models.CASCADE上,相关的_name='dataset'))
is_public=models.BooleanField(默认值=False)
title=models.CharField(最大长度=255)
name=models.CharField(最大长度=255,唯一性=True)
数据组

类数据组(models.Model):
name=models.CharField(最大长度=255,唯一性=True)
我在DRF中找到了这样的东西:

类DataGroupSerializer(serializers.HyperlinkedModelSerializer):
url=serializers.HyperlinkedEntityField(查看\u name='datagroup-detail')
dataset=serializers.HyperlinkedRelatedField(many=True,read\u only=True,view\u name='dataset-detail',lookup\u field='name')
类元:
模型=数据组
字段=['id'、'name'、'url'、'dataset']
类DataGroupViewSet(viewsets.ModelViewSet):
queryset=DataGroup.objects.all()
serializer\u class=DataGroupSerializer
但是,我的问题是应该为用户过滤数据集

现在,通过数据集,他们可以得到以下子集:

def get_queryset(self):
返回self.queryset.for_user(self.request.user)
但是,我的问题是如何使用上面的DataGroupSerializer做什么

编辑:我尝试了下面的建议,如下所示:

类DataSetionDataGroupField(序列化程序.HyperlinkedRelatedField):
def get_queryset(自我):
user=self.context['request'].user
queryset=Dataset.objects.for_用户(用户)
打印(列表(查询集))
返回查询集
类DataGroupSerializer(serializers.HyperlinkedModelSerializer):
url=serializers.HyperlinkedEntityField(查看\u name='datagroup-detail')
datasets=datasetiondatagroupfield(many=True,view\u name='dataset-detail',lookup\u field='name')
类元:
模型=数据组
字段=['id'、'name'、'url'、'dataset']

我只得到了正在打印的具有权限的数据集,但它们都出现在数据集列表中。。。所以尝试其他方法。

你想要类似于使用超链接的LatedField而不是
PrimaryKeyRelatedField
这就是我最终解决问题的方法。效果很好

类DataSetingGroupSerializer(serializers.HyperlinkedModelSerializer):
url=serializers.HyperlinkedEntityField(查看\u name='dataset-detail',查找\u field='name')
类元:
模型=数据集
查找\字段='name'
字段=[
'名称','url']
类DataGroupSerializer(serializers.HyperlinkedModelSerializer):
url=serializers.HyperlinkedEntityField(查看\u name='datagroup-detail')
datasets=serializers.SerializerMethodField()
类元:
模型=数据组
字段=['id'、'name'、'url'、'dataset']
def get_数据集(自身、obj):
queryset=obj.datasets.all()
如果self.context中有“请求”:
queryset=queryset.for_user(self.context['request'].user)
serializer=DataSetingGroupSerializer(queryset,many=True,context=self.context)
返回序列化程序.data
类DataGroupViewSet(viewsets.ModelViewSet):
queryset=DataGroup.objects.all()
serializer\u class=DataGroupSerializer