Передача поля CharField в поле ArrayField из React в Django с помощью Axios

Я пытаюсь создать функцию, в которой если пользователь пишет сообщение, то ID сообщения попадает в поле ArrayField в модели User, чтобы можно было получить доступ к списку написанных им сообщений.

Я ввел новый столбец в базу данных User, сделал необходимые миграции и опробовал эту функцию, просто сохранив один ID поста, который работал нормально. Проблема возникла, когда я сделал поле модели ArrayField. Теперь при выполнении POST-запроса я получаю ошибку

response
: 
"{\"posts_written\":{\"0\":[\"Expected a list of items but got type \\\"str\\\".\"]}

В настоящее время я пишу ЗАПРОС как

    let newPost = new FormData()
    newPost.append('title', title)
    newPost.append('content', content)
      updatePostList.append('posts_written', id + ',')
      await API.patch(`/profile/user/${loggedInProfile.id}/update/`, updateArticleList, {
        headers: {
          'Authorization': `Token ${sessionToken}`,
          'Content-Type': 'multipart/form-data',
        },
      })

Я не знаю, как написать POST-запрос для работы с ArrayField, я искал ответы в Интернете, но ничего не нашел. Я также пытался обернуть id в объектные скобки JS, но это не помогло. Используя панель Django Admin, я увидел, что ручное добавление к полю articles_written и разделение значений символом , сохраняет их в отдельном индексе массива, поэтому я добавил , к id. Однако сейчас у меня нет идей.

Вот модель пользователя, если это поможет

class User(AbstractUser):
    id = models.CharField(max_length=36, default=generate_unique_id, primary_key=True)
    username = models.CharField(max_length=250, unique=True) 
    profile_image = models.ImageField(upload_to='profile_images', default='/profile_images/DefaultAvatar.png')
    bio = models.CharField(max_length=500, default='', blank=True, null=True)
    display_name = models.CharField(max_length=250, blank=True, null=True)
    articles_written = ArrayField(
        ArrayField(models.CharField(max_length=36, blank=True, null=True)),
    )

Спасибо

После нескольких часов я наконец-то нашел решение, поэтому публикую на случай, если кто-то столкнется с этим в будущем

Я отказался от попыток сделать это из фронтенда и решил, что будет более эффективно, если модель User можно будет обновлять из бэкенда.

Я добавил поле ForeignKey в модель Post, чтобы имитировать отношения "один ко многим".

class Post(models.Model)::
    id = models.CharField(max_length=36, default=gen_uuid, primary_key=True)
    content = models.TextField(default='content')
    author = models.ForeignKey(User, on_delete=models.CASCADE)

Затем в сериализаторе User я добавил новое поле, запросив набор Post.

class UserSerializer(serializers.ModelSerializer):
    post_set = PostSerializer(many=True, read_only=True)
    class Meta:
        fields = (
            'id',
            'username',   
            'post_set'
        )
        model = User

Теперь отношения установлены enter image description here

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