Почтовый запрос Axios для создания REST-модели Django с полем ForeignKey

Я работаю над проектом NextJS + Django REST Framework, где у меня есть две модели; Document, MySource

models.py

class Document(models.Model):
    id = HashidAutoField(primary_key=True)
    title = models.CharField(max_length=100, default="Untitled")
    template = models.CharField(max_length=100, default="")
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

class MySource(models.Model):
    id = models.AutoField(primary_key=True)
    document = models.ForeignKey(
        Document,
        related_name="mysource",
        on_delete=models.CASCADE,
        null=True,
        blank=True,
    )
    url = models.CharField(max_length=500, default="")
    title = models.CharField(max_length=500, default="", blank=True)
    publisher = models.CharField(max_length=500, default="", blank=True)
    desc = models.CharField(max_length=500, default="", blank=True)
    summary = models.CharField(max_length=500, default="", blank=True)

Я хочу сделать запрос axios.post, который создает объект MySource, связанный с документом предоставленного документа. Что-то вроде этого:

{
  "url": "aaaa",
  "title": "bbbb",
  "publisher": "bbbb",
  "desc": "bbbb",
  "summary": "bbbb",
  "document": "J9DY2pE"
}

В настоящее время при выполнении POST-запроса с указанными выше полями создается объект, но документ имеет значение null. Однако я могу выбрать модель документа вручную из панели администратора ниже.

[![admin panel][1]][1]

Только после этого я получаю желаемый результат axios.GET(documents), как показано ниже.

"id": "J9DY2pE",
    "mysource": [
        {
            "id": 16,
            "url": "google.com",
            etc. . .
        },
    ],
    "title": "renamed title",
    "template": "commonapp",
    "updated": "2022-05-19T02:16:00+0000",
    "created": "2022-04-21T06:59:05+0000"

Вот остальная часть моего кода

serializers.py

from django.forms.models import model_to_dict


class DocumentListingField(serializers.RelatedField):
    def to_representation(self, instance):
        return model_to_dict(instance.document)

class MySourceSerializer(serializers.ModelSerializer):
    Document = DocumentListingField(many=False, read_only=True)

    class Meta:
        model = MySource
        fields = ("id", "url", "title", "publisher", "desc", "summary", "Document")


class DocumentSerializer(serializers.ModelSerializer):
    id = HashidSerializerCharField(source_field="documents.Document.id", read_only=True)
    question_blocks = QuestionBlockSerializer(many=True)
    outline_blocks = OutlineBlockSerializer(many=True)
    mysource = MySourceSerializer(many=True)
    user = serializers.PrimaryKeyRelatedField(
        read_only=True, default=serializers.CurrentUserDefault()
    )

    class Meta:
        model = Document
        fields = "__all__"

    def create(self, validated_data):
        question_blocks = validated_data.pop("question_blocks")
        outline_blocks = validated_data.pop("outline_blocks")
        document = Document.objects.create(**validated_data)
        for qBlock in question_blocks:
            QuestionBlock.objects.create(document=document, **qBlock)
        for oBlock in outline_blocks:
            OutlineBlock.objects.create(document=document, **oBlock)
        document.save()
        return document
   


  [1]: https://i.stack.imgur.com/E798L.png
Вернуться на верх