在为 Django Rest Framework 编写测试时,应该如何创建超链接关系?

我正在尝试使用相关的 Bar 对象创建一个 Foo 对象,但我不确定如何最有效地创建该关系。

# models.py

import uuid

from django.db import models

class Foo(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4)
    bar = models.ForeignKey('Bar')

class Bar(models.Model):
    BarUUID = models.UUIDField(primary_key=True, default=uuid.uuid4
# serializers.py

from rest_framework import serializers
from myapp.models import Bar, Foo

class FooSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Foo
        fields = ('url', 'id', 'bar')

class BarSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Bar
        fields = ('url', 'BarUUID')
# views.py
class FooViewSet(viewsets.ModelViewSet):
    queryset = Foo.objects.all()
    serializer_class = FooSerializer

class BarViewSet(viewsets.ModelViewSet):
    queryset = Bar.objects.all()
    serializer_class = BarSerializer
# urls.py

from rest_framework import routers

router = routers.DefaultRouter()
router.register(r'foos', views.FooViewSet)
router.register(r'bars', views.BarViewSet)
# tests.py

from rest_framework.reverse import reverse
from rest_framework.test import APITestCase

class FooTests(APITestCase):
    def test_create_foo(self):
        bar = Bar.objects.create()

        url = reverse('foo-list')
        data = {
            'bar': # how do I get the URL?
        }

        response = self.client.post(url, data, format='json')

最佳答案

您可以使用序列化程序来获取它。

像这样:

from django.test.client import RequestFactory

from your_app.serializers import BarSerializer

context = {'request': RequestFactory().get('/')}
bar_serializer = BarSerializer(bar, context=context)
bar_serializer.data['url']

关于django - 测试 Django Rest Framework 时创建超链接关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39067628/

10-11 02:42
查看更多