Django REST Framework сериализатор для пользовательских данных формы - PullRequest
0 голосов
/ 30 апреля 2019

Я начал изучать, как использовать Django REST Framework вместе с React, и у меня есть быстрый вопрос.Я создал форму и использую CreateAPIView и UpdateAPIView для создания / обновления элементов соответственно.Но как мне получить содержимое для заполнения моего поля <select>, если список происходит от переменной в одной из моих моделей?

from model_utils import Choices

class Author(models.Model):
    GENDER = Choices('male', 'female', "I don't know really")  # How do I get this?

    gender = models.CharField(max_length=10, choices=GENDER)

Что будут сериализатор и взгляды на Author.GENDER выглядят так как это не модель?

На данный момент это то, что у меня есть на данный момент.

Джанго (я думаю, здесь нет ничего необычного).

# Serializer.
class AuthorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Author
        fields = ('id', 'gender')

# View
class AuthorUpdateView(UpdateAPIView):
    queryset = Author.objects.filter(deleted_at__isnull=True)
    serializer_class = AuthorSerializer

Реакция.

componentDidMount() {
  const pk = this.props.match.params.pk
  axios.get(`http://localhost:8000/api/authors/${pk}`)
    .then(response => {
      const pk = response.data.id
      const gender = response.data.gender
      this.setState({gender})
    })
    .catch(err => console.log(err))
}

Я открыт для любого направления или концепции, которые могут у вас возникнуть при использовании DRF, поэтому я также могу узнать, как вы это сделаете.

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Как я уже упоминал в комментарии, вы можете создать простое представление для возврата вариантов.

from rest_framework.decorators import api_view
from rest_framework.response import Response


@api_view()
def foo_view(request):
    choices = [i[0] for i in Author.GENDER]
    return Response(choices)
0 голосов
/ 30 апреля 2019

Используйте viewset , чтобы объединить логику для набора связанных видов (список, создать, обновить)

class AuthorViewSet(ModelViewSet):
    queryset = Author.objects.filter(deleted_at__isnull=True)
    serializer_class = AuthorSerializer

Сделайте запрос OPTIONS, чтобы получить метаданные для вашего ресурса, включая список допустимых вариантов gender поле

Запрос

OPTIONS /api/authors/

Ответ

HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "name": "Author List",
    "parses": [
        "application/json",
        "application/x-www-form-urlencoded",
        "multipart/form-data"
    ],
    "actions": {
        "POST": {
            "id": {
                "type": "integer",
                "required": false,
                "read_only": true,
                "label": "Id"
            },
            "gender": {
                "type": "choice",
                "required": true,
                "read_only": false,
                "label": "Gender",
                "choices": [
                    {
                        "value": "male",
                        "display_name": "male"
                    },
                    {
                        "value": "female",
                        "display_name": "female"
                    },
                    {
                        "value": "I don't know really",
                        "display_name": "I don't know really"
                    }
                ]
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...