DRF测试模型序列化器 - Django Restframework

时间:2018-01-09 10:28:08

标签: django serialization django-rest-framework

我正在使用APITestCase在django restframework中测试我的Serializer模型。 这是我的结构:

class Usertest(APITestCase):
    def test_userprofile_create(self):
        user = User.objects.create(username='asghar', 
                                   password='4411652A', 
                                   email='ww@gmail.com',)
        profile = UserProfile.objects.create(fullname='asghariiiiii', 
                                             phonenumber='9121345432',
                                             address='bella', 
                                             user=user)
        user.user_profile = profile
        client = APIClient()
        request = client.get('/user/create/')
        data = UserCreateSerializer(user, 
                                    context={'request': request}).data

        url = reverse('user-create')
        response_create =client.post(url, data)

在我的视图中权限设置为AllowAny。 无需登录或强制验证。

  

data = UserCreateSerializer(user,context = {' request':request})。data AttributeError:' HttpResponseNotFound'对象没有属性' build_absolute_uri'

正如您所看到的,错误来自于创建data。我首先尝试删除context,但此标题出现错误:

  

AssertionError:HyperlinkedIdentityField需要序列化程序上下文中的请求。在实例化序列化程序时添加context={'request': request}

2 个答案:

答案 0 :(得分:0)

  

request = client.get(' / user / create /')

这会返回响应,而不是请求。您应该可以使用APIRequestFactory

来解决这个问题
from rest_framework.test import APIRequestFactory

# Using the standard RequestFactory API to create a form POST request
factory = APIRequestFactory()
request = factory.post('/user/create/', {})
data = UserCreateSerializer(user, 
                                context={'request': request}).data

答案 1 :(得分:0)

REST_FRAMEWORK请求没有方法build_absolute_uri

return request.build_absolute_uri(url)
AttributeError: 'function' object has no attribute 'build_absolute_uri'

DRF请求和Django HTTP请求不一样。