Обратное отношение внешнего ключа в сериализаторах django

Могу ли я сохранить данные в django в обратном отношении внешнего ключа.

Предположим, что у меня есть модели,

 class Author(models.Model):
     author_id = models.SlugField(default=None, blank=True)
     author_name = models.CharField(max_length=200)

 class Article(models.Model):
     author = models.ForeignKey(Author, on_delete=models.CASCADE)
     article_title = models.CharField(max_length=200)
     content = models.CharField(max_length=200)

Предположим, я хочу сохранить все статьи с данными об их авторах, какой тип сериализатора я должен использовать. Я получаю данные в такой форме:

  article_data =[
       {
          "title":"ome title",
          "content":"content",
          "author":{
             "author_id":"2",
             "author_name":"some name",
          }
       },
       {
          "title":"ome title",
          "content":"content",
          "author":{
             "author_id":"2",
             "author_name":"some name",
          }
       }
  ]

Как я должен написать свой сериализатор для сохранения таких данных. Я не хочу писать файл логических представлений. Я не хочу перебирать все мои статьи, а затем сохранять статью и автора отдельно, используя два сериализатора. Я хочу вызвать один сериализатор и передать ему весь список:

 saveArticleAndAuthor(article_data, many=True)

сериальщик должен сохранить данные автора в таблице author, а остальные данные в таблице article.

вам нужно два класса в serializer.py

class Author_serializer(serializers.ModelSerializer):
     class Meta:
          model = Article
          fields = ["author_id", "author_name"]

и второй должны быть в разделе Author_serializer

class saveArticleAndAuthor_serializer(serializers.ModelSerializer):
     class Meta:
          model = Article
          fields = ["author", "article_title", "content"]
     author = Author_serializer()

в views.py вы используете только saveArticleAndAuthor_serializer и он сериализует Author_serializer как "глубину второго уровня"

Вернуться на верх