【问题标题】:Django Rest Framework Tests HyperlinkedRelatedFieldDjango Rest Framework 测试 HyperlinkedRelatedField
【发布时间】:2016-06-25 10:33:48
【问题描述】:

我有一个使用 Django Rest Framework 3.3.2 和 Python 3.4 的 Django 1.8.9 应用程序

我愿意测试我的 API 是否正常运行。

我陷入了一项测试,该测试旨在验证我是否可以通过 API 将数据发布到模型中。问题是:这个模型与另一个模型有外键关系。这个外键被 HyperlinkedModelSerializer 转换成超链接。

例如:http://host:port/api/relation-model-name/id-related-model

这是我的测试:(重要的部分是 data={...})

    def test_api_create(self):
       """ Test the creation of new entries via the API """

       url = reverse(self.api_model_url+'-list')

       data = {'sid':'New change entry', 'status':'THE HYPERLINK TO THE RELATED MODEL SHOULD BE HERE', 'name':'New change entry'}

       # Check that a new entry can be created by an administrator via the API
       self.api_client.login(username='admin', password='admin')
       response = self.api_client.post(url, data, format='json')
       content = self.parse_json_response(response, Status.HTTP_201_CREATED)
       self.assertEqual(content['sid'], 'New change entry')

如果我硬写超链接但我想以通用方式构建它,则此测试有效。 我可以轻松检索相关字段的 id。我想在我的测试中获取超链接。

提前感谢您的帮助!

干杯!

【问题讨论】:

    标签: python django rest python-3.x django-rest-framework


    【解决方案1】:

    你应该看看HyperlinkedRelatedField是如何获取url的:

    def get_url(self, obj, view_name, request, format):
        """
        Given an object, return the URL that hyperlinks to the object.
        May raise a `NoReverseMatch` if the `view_name` and `lookup_field`
        attributes are not configured to correctly match the URL conf.
        """
        # Unsaved objects will not yet have a valid URL.
        if hasattr(obj, 'pk') and obj.pk in (None, ''):
            return None
    
        lookup_value = getattr(obj, self.lookup_field)
        kwargs = {self.lookup_url_kwarg: lookup_value}
        return self.reverse(view_name, kwargs=kwargs, request=request, format=format)
    

    self.reverse 只是 django 的普通 reverse 函数。 所以基本上你只需要view_namelookup_value,在你的情况下是相关领域的id

    【讨论】:

      猜你喜欢
      • 2018-05-14
      • 2015-05-31
      • 2014-05-29
      • 1970-01-01
      • 2015-10-12
      • 2019-05-09
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      相关资源
      最近更新 更多