【问题标题】:DRF testing Model Serializer - Django RestframeworkDRF 测试模型序列化器 - Django Rest 框架
【发布时间】:2018-06-18 08:47:10
【问题描述】:

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

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。 无需登录或 force_authenticate。

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

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

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

【问题讨论】:

    标签: django serialization django-rest-framework


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      REST_FRAMEWORK 请求没有方法 build_absolute_uri

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

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

      【讨论】:

        猜你喜欢
        • 2016-04-07
        • 2012-11-16
        • 2014-07-26
        • 2013-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-15
        • 2015-06-29
        相关资源
        最近更新 更多