Динамическое поле формы в Django REST - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь создать форму, где пользователь может создать блог. Форма будет иметь название, от одного до многих авторов и содержание. Что касается авторов, я хотел бы иметь поле поиска автозаполнения ввода (например, поле поиска тегов stackoverflow), которое будет добавлять авторов в блог. Я знаю, как создать внешний вид этого интерфейса, но что касается использования среды REST от Django для добавления авторов в мою модель, я не знаю, как это сделать.

Модель:

class Story(models.Model):
    title       = models.CharField(max_length=100, null=False)
    content     = models.TextField()
    created_at  = models.DateField(auto_now_add=True)


class StoryAuthor(models.Model):
    story   = models.ForeignKey(Story, on_delete=models.CASCADE)
    user    = models.ForeignKey(User, on_delete=models.CASCADE)

Как просмотреть каждого добавленного автора из входных данных и добавить его в мою модель StoryAuthor? Так, например, одна история должна выглядеть так:

id title         content     created_at
1  Hello world   blah, blah  2019-06-04


story  user
1      John
1      Jack
1      Brad

Что касается поля ввода, данные будут выглядеть следующим образом: "Джон, Джек, Брэд", как я могу использовать REST Джанго, чтобы иметь сериализатор / конечную точку, которая может это сделать?

1 Ответ

1 голос
/ 20 июня 2019

Если вы работаете с Сериализаторами , ниже может быть подход.

Просто добавьте Поле ManyToMany в вашей модели Story:

class Story(models.Model):
    title       = models.CharField(max_length=100, null=False)
    content     = models.TextField()
    created_at  = models.DateField(auto_now_add=True)
    #new field
    authors = models.ManyToManyField(User, through='StoryAuthor')

Затем в вашем serialzer добавьте поле автора в Serialzer ( CustomSerialzer ) и напишите User Serialzer (если у вас его еще нет):

class UserSerializer(serializers.Serializer):
    username = serializers.CharField(max_length=100)

class StorySerializer(serializers.ModelSerializer):
    authors = UserSerializer(read_only=True, many=True)

    class Meta:
        ...

Примечание: Если вы не планируете добавлять дополнительные поля в StoryAuthor, вам не нужно самостоятельно писать класс StoryAuthor. Просто добавьте поле авторов в класс Story без аргумента «through», и ORM Django позаботится о сводной таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...