Задать вопрос
@vagitaku

Как формировать json в serializers.ModelSerializer?

Использую django rest framework. Вот две модели:
class ArticleList(models.Model):
    name = models.CharField(
        max_length=120,
        blank=False,
        null=False,
        unique=True,
        verbose_name='Название'
    )
    reverse = models.BooleanField(
        default=False,
        blank=False,
        null=False,
        verbose_name='Обратный'
    )


class Article(models.Model):
    user = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        null=False,
        verbose_name='Пользователь',
        default=2
    )
    article= models.ForeignKey(
        ArticleList,
        on_delete=models.PROTECT,
        null=False,
    )
    repeat = models.IntegerField(
        blank=False,
        null=False,
        verbose_name='Повтор'
    )
    date = models.DateTimeField(
        blank=False,
        null=False,
        verbose_name='Дата и время'
    )

Так сереализирую:
class ArticleListSerializer(serializers.ModelSerializer):

    class Meta:
        model = ArticleList
        fields = ('name', 'reverse')


class ArticleSerializer(serializers.ModelSerializer):

    article= ArticleListSerializer()

    class Meta:
        model = Article
        fields = ('repeat',  'date', 'article')

Получаю вот такой json:
[
    {
        "repeat": 8,
        "date": "2019-04-01T08:25:00+03:00",
        "article": {
            "name": "Имя 1",
            "reverse": true
        }
    },
    {
        "repeat": 10,
        "date": "2019-04-01T08:28:00+03:00",
        "article": {
            "name": "Имя 1",
            "reverse": true
        }
    },
    {
        "repeat": 10,
        "date": "2019-04-01T08:31:00+03:00",
        "article": {
            "name": "Имя 1",
            "reverse": true
        }
    }
]

Можно, что-то в сереализаторе сделать, чтобы json был такого формата:
{  
   "name":"Имя 1",
   "reverse":true,
   "article":[  
      {  
         "repeat":8,
         "date":"2019-04-01T08:25:00+03:00"
      },
      {  
         "repeat":10,
         "date":"2019-04-01T08:28:00+03:00"
      },
      {  
         "repeat":10,
         "date":"2019-04-01T08:31:00+03:00"
      }
   ]
}

?
  • Вопрос задан
  • 62 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы