Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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 Framework HyperlinkedEntityField错误(需要请求)_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django Rest Framework HyperlinkedEntityField错误(需要请求)

Python Django Rest Framework HyperlinkedEntityField错误(需要请求),python,django,django-rest-framework,Python,Django,Django Rest Framework,我在序列化多对多关系后出现此错误,在没有URL的情况下可以正常工作,但由于某些原因,我在尝试包含它时出现此错误 `InitiativeUrlHyperlinkedIdentityField` requires the request in the serializer context. Add `context={'request': request}` when instantiating the serializer. 以下是我的视图和序列化程序 视图.py class CreateIni

我在序列化多对多关系后出现此错误,在没有URL的情况下可以正常工作,但由于某些原因,我在尝试包含它时出现此错误

`InitiativeUrlHyperlinkedIdentityField` requires the request in the serializer context. Add `context={'request': request}` when instantiating the serializer.
以下是我的视图和序列化程序

视图.py

class CreateInitiativeAPIView(generics.CreateAPIView):
    serializer_class = CreateInitiativeSerializer

class InitiativeListAPIView(generics.ListAPIView):
    authentication_classes = [SessionAuthentication, BasicAuthentication, JSONWebTokenAuthentication]
    serializer_class = InitiativeListSerializer
    permission_classes = [permissions.IsAuthenticated]
    queryset = Initiative.objects.all()

class InitiativeDetailAPIView(generics.RetrieveAPIView):
    authentication_classes = [SessionAuthentication, BasicAuthentication, JSONWebTokenAuthentication]
    serializer_class = InitiativeFullSerializer
    permission_classes = [permissions.IsAuthenticated]
    lookup_field = 'id'


    def get_object(self):
        initiative_id = self.kwargs["initiative_id"]
        obj = get_object_or_404(Initiative, id=initiative_id)
        return obj

    def put(self, request, *args,**kwargs):
        return self.update(request, *args, **kwargs)
序列化程序.py

class InitiativeUrlHyperlinkedIdentityField(serializers.HyperlinkedIdentityField):
    def get_url(self, obj, view_name, request, format):
        kwargs = {
            'initiative_id': obj.id,
        }
        return reverse(view_name, kwargs=kwargs, request=request, format=format)

class CreateInitiativeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Initiative
        fields = ['name', 'description', 'image', 'goal']

class InitiativeListSerializer(serializers.ModelSerializer):
    url = InitiativeUrlHyperlinkedIdentityField("initiative_detail_api", lookup_field='id')
    class Meta:
        model = Initiative
        fields = [
            'url',
            'name',
        ]

class InitiativeFullSerializer(serializers.ModelSerializer):
    url = InitiativeUrlHyperlinkedIdentityField("initiative_detail_api", lookup_field='id')
    class Meta:
        model = Initiative
        fields = [
            'url',
            'id',
            'name',
            'description',
            'image',
            'goal']
这是从InitiativeFullSerializer获取信息的序列化程序

class ChapterInitiativePartialListSerializer(serializers.ModelSerializer):
initiative = InitiativeFullSerializer(many=False, read_only=True)
class Meta:
    model = ChapterInitiative
    fields = [
        'initiative'
    ]
通过URL调用的初始序列化程序

class ChapterFullListSerializer(serializers.ModelSerializer):
url = ChapterUrlHyperlinkedIdentityField("chapter_detail_api", lookup_field='id')
active_initiativeset = serializers.SerializerMethodField('get_active')
school = serializers.CharField(source='school.name', read_only=True)
class Meta:
    model = Chapter
    fields = [
        'url',
        'id',
        'school',
        'name',
        'payee',
        'active_initiativeset'
    ]

def get_active(self, chapter):
    initiatives = chapter.chapterinitiative_set.filter(active=True)
    serializer = ChapterInitiativePartialListSerializer(instance=initiatives, many=True)
    return serializer.data

在我的代码中应该在哪里添加
context={'request':request}

Hm。您必须检查视图类。有一个名为
get\u serializer\u context()
的方法,默认情况下应该添加请求。看见我会先检查一下