Django API: получение вложенного Json для UnitTest - PullRequest
0 голосов
/ 23 июня 2019

У меня есть конечная точка API и проблема с нахождением предмета из вложенного json ...

Я пишу такой тест и печатаю, какие данные он мне показывает:

    class TestSingleArticle(TestCase):
        def setUp(self):
            article = ArticleFactory2.create()
            self.url = reverse('article-single2', args=[article.alias])

        def test_single_article_get(self):
            request = self.client.get(self.url)
            print(request.data)

Когда я запускаю это, я вижу следующее json в terminal

{
 'alias': '508674f2-b570-47f1-b1d8-01592a3af359', 
 'author': OrderedDict([('id', 1), ('organization', OrderedDict([('id', 1), ('organization_name', 'org name'), ('contact', '256644')])), ('name', 'jhon doe'), ('detail', 'this is detail')]), 
 'category': OrderedDict([('id', 1), ('name', 'sci-fi')]), 
 'title': 'i am title', 
 'body': 'i am body'
}

Я пытаюсь схватить contact сверху json но мне не удалось ....


Если вы не понимаете вышеприведенное утверждение, см. Этот дополнительный совет для вас.

Это мой класс сериализации:

    from rest_framework import serializes
    from . models import Author, Article, Category, Organization


    class OrganizationSerializer(serializers.ModelSerializer):
        class Meta:
            model = Organization
            fields = '__all__'


    class AuthorSerializer(serializers.ModelSerializer):
        organization = OrganizationSerializer():
        class Meta:
            model = Author
            fields = '__all__'


    class CategorySerializer(serializers.ModelSerializer):
        class Meta:
            model = Category
            fields = '__all__'


    class ArticleSerializer(serializers.ModelSerializer):
        author = AuthorSerializer()
        category = CategorySerializer()
        class Meta:
            model =  Article
            fields = '__all__'

и ниже мои модели:

    from django.db import models
    import uuid

    class Organization(models.Model):
        organization_name = models.CharField(max_length=50)
        contact = models.CharField(max_length=12, unique=True)

        def __str__(self):
            return self.organization_name

    class Author(models.Model):
        name = models.CharField(max_length=40)
        detail = models.TextField()
        organization = models.ForeignKey(Organization, on_delete=models.DO_NOTHING)

        def __str__(self):
            return self.name

    class Category(models.Model):
        name = models.CharField(max_length=100)

        def __str__(self):
            return self.name

    class Article(models.Model):
        alias = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
        author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='author')
        title = models.CharField(max_length=200)
        body = models.TextField()
        category = models.ForeignKey(Category, on_delete=models.CASCADE)

В любом случае, я хочу получить contact от вложенного json, кто-нибудь может мне помочь в этом случае?

1 Ответ

0 голосов
/ 23 июня 2019

Сначала вы можете указать format в вызове функции self.client.get и установить его в формате JSON:

request = self.client.get(self.url, format='json')

После этого вы можете просто получить свой контакт, как это:

contact = request.data['author']['organization']['contact']
...