Tom*_*Tom 6 python django django-rest-framework
我构建了一个Web应用程序,其中后端是使用Django REST Framework实现的.现在我正在编写单元测试,我在测试序列化方法方面遇到了问题.这是我正在努力解决的序列化方法的一个例子:
def get_can_edit(self, obj):
request = self.context.get('request')
user = User.objects.get(username=request.user)
return user == obj.admin
Run Code Online (Sandbox Code Playgroud)
当试图从测试中调用它时,首先我声明一个序列化器的实例:
self.serializer = ConferenceSerializer()
Run Code Online (Sandbox Code Playgroud)
但现在我需要self.serializer的时候有正确的请求get_can_edit呢self.context.get('request').我使用RequestFactory创建了一个包含正确信息的虚假请求:
self.request1 = RequestFactory().get('./fake_path')
self.request1.user = self.user1
Run Code Online (Sandbox Code Playgroud)
现在我卡住了,因为我不能确定如何添加request1到serializer这样self.context.get('request')会返回request1.
谢谢.
Rah*_*pta 10
在测试中实例化序列化程序时,需要传递context参数以添加request1到序列context化程序.
从DRF文档中包含额外的上下文:
您可以通过
context在实例化序列化程序时传递参数来提供任意附加上下文.
你需要做一些事情:
# pass context argument
self.serializer = ConferenceSerializer(context={'request': request1})
Run Code Online (Sandbox Code Playgroud)
这将为request1您的序列化程序提供所需的对象context.