在为 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/