Django REST: Создайте объект модели с полем user в качестве текущего пользователя

У меня есть модель документа, в которой есть поле user в качестве ForeignKey. Я пытаюсь реализовать две очень общие функции:

  1. пользователь создает новый документ сCredentials=True; документ, конечно, будет иметь владельца как пользователь, который его создал
  2. .
  3. пользователь может позже получить все документы, владельцем которых является он сам

Вот мой текущий код. Я предполагаю, что я правильно указал поля модели, поскольку я могу видеть поле User как выпадающее меню в панели администратора. Однако я не уверен, какую часть (бэкенд или фронтенд) мне нужно изменить, чтобы позволить фронтенду сделать запрос AXIOS POST.

БЭКЕНД (DJANGO REST FRAMEWORK)

models.py

class Document(models.Model):
    id = HashidAutoField(primary_key=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
    title = models.CharField(max_length=100, default="Untitled")
    template = models.CharField(max_length=100, default="")
    editorState = models.JSONField(default=[])
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

serializers.py

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

FRONTEND (REACT)

export const createDocTemp = ({
  router,
  title,
  templateId,
  question_blocks,
  outline_blocks,
}: NewDocument) => {
  const data = {
    user =====================================> what should go here?
    title,
    templateId,
    question_blocks,
    outline_blocks,
  };
  console.log(data);
  axios({
    method: 'post',
    url: `${process.env.NEXT_PUBLIC_API_URL}/api/v1/documents/`,
    headers: { 'Content-Type': 'application/json' },
    data,
    withCredentials: true,
  })
    .then(function (response) {
      if (response.status === 201) {
        router.push(`/draft/${response.data.id}/`);
      }
    })
    .catch(function (error) {
      console.log(error.toJSON());
    });
};

Несмотря на то, что я установил поле пользователя как not-required, я постоянно получаю 400 ошибку для функции выше. Я не могу увидеть точное сообщение об ошибке, так как не смог воспроизвести часть "withCredentials" в своем postman.

в сериализаторах вы отправляете id пользователя

const data = {
    user =====================================> ID (1,22,44,etc) of user
    title,
    templateId,
    question_blocks,
    outline_blocks,
  };

Во-вторых, необходимо удалить два параметра read_only из DocumentSerializer

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