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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 在修补程序之后,我在序列化程序中为我的请求获取一个None类型_Django_Django Rest Framework_Django Serializer - Fatal编程技术网

Django 在修补程序之后,我在序列化程序中为我的请求获取一个None类型

Django 在修补程序之后,我在序列化程序中为我的请求获取一个None类型,django,django-rest-framework,django-serializer,Django,Django Rest Framework,Django Serializer,我正在做一个测试,部分更新或修补我的产品模型中的一些字段。我应该能够更新产品模型中的任何字段。在我的序列化程序中,我有一个来自请求对象的url生成器。但是,请求未在我的序列化程序上传递,或者它是无类型。因此,我得到了一个错误:AttributeError:“NoneType”对象没有属性“build\u absolute\u uri” 如何将请求传递给序列化程序 def test_patch_products(self): data = { 'description': 'Thi

我正在做一个测试,部分更新或修补我的产品模型中的一些字段。我应该能够更新产品模型中的任何字段。在我的序列化程序中,我有一个来自请求对象的url生成器。但是,
请求
未在我的序列化程序上传递,或者它是无类型。因此,我得到了一个错误:
AttributeError:“NoneType”对象没有属性“build\u absolute\u uri”

如何将请求传递给序列化程序

def test_patch_products(self):
    data = {
    'description': 'This is an updated description.',
    'type': 'New'
    }
    ...
    ...
    response = self.client.patch('/data/products/1/',
        data=data, format='json')
我认为:

def partial_update(self, request, pk=None):
    product= get_object_or_404(Product, pk=pk)

    serializer = ProductSerializer(product,
        data=self.request.data, partial=True,
        )

    if serializer.is_valid():
        serializer.save(uploaded_by=self.request.user)
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
在我的序列化程序中:

class ProductSerializer(serializers.ModelSerializer):
    uploaded_by= serializers.StringRelatedField()
    thumbnail = serializers.SerializerMethodField()

    class Meta:
        model = CaptureGroup
        fields = ('__all__')

    def get_thumbnail(self, object):
        request = self.context.get('request') # request is None here
        thumbnail = object.thumbnail.url
        return request.build_absolute_uri(thumbnail) # here is the url builder

在您的视图中,您可以向序列化程序传递一些附加上下文。这对处理您的请求很有用

#views.py
def部分更新(自我、请求、主键=无):
产品=获取对象或404(产品,主键=主键)
序列化程序=产品序列化程序(产品,
data=request.data,partial=True,
context={'request':request},您缺少这一行
)
# ...
然后,您可以使用
self.context.get('request')
在序列化程序中对其进行操作,但我发现您已经在代码中找到了该部分


如果您想了解更多信息,请告知。

它仍然是
None
甚至
self。request
是None。是的,我希望数据正确传递。好的,我重新编辑了<代码>局部更新是视图集的一种方法吗?在初始化序列化程序之前,你能检查一下你的
partial\u update
方法中的请求等于什么吗?
context={'request':request},
是很好的解决方案!