Используя Swagger с Django Rest Framework, я могу видеть параметры POST в разных полях вместо одного тела - PullRequest
1 голос
/ 04 марта 2020

Я на самом деле создаю API на Django веб-сайте, используя Django Rest Framework. Я пытаюсь документировать их, используя Swagger.

Я использую Django 2.1, django -rest-swagger 2.2 и djangorestframework 3.11

Все почти работает, как и ожидалось, кроме чего-то:

Позвольте мне объяснить Вы:

У меня есть эта модель (models.py)

class Technology(models.Model):
    """
    This model defines the different technologies
    """
    name = models.CharField(max_length=CHAR_SHORT)
    path = models.CharField(max_length=CHAR_SHORT, validators=[validate_tech_path], help_text='this is only used to construct the url')
    image = models.ImageField()
    mailer = models.EmailField(blank=True)
    external = models.BooleanField(default=False)
    internal = models.BooleanField(default=False)

    class Meta:
        verbose_name_plural = "technologies"
        ordering = ['name']

    def __str__(self):
        return self.name

Тогда у меня есть соответствующий класс сериализатора (serializer.py):

class TechnologySerializer(serializers.ModelSerializer):
    """
    This model defines the different technologies
    """
    class Meta:
        model = Technology
        fields = ('id', 'name', 'path', 'image', 'mailer', 'external', 'internal')

Наконец-то я иметь мой взгляд с сгенерированными API (views.py):

class TechnologyViewSet(viewsets.ModelViewSet):

    queryset = Technology.objects.all()
    serializer_class = TechnologySerializer
    http_method_names = ['get','post','delete','put']

Вот результат:

Описание API 1 Описание API 2

Как вы видите на картинке выше, параметры не совпадают с json body.

Возможно ли что-то подобное для всех параметров:

Требуется параметр API Большое спасибо.

1 Ответ

0 голосов
/ 04 марта 2020

Попробуйте использовать ListCreateAPIView вместо modelviewset, вы сможете увидеть ваше сообщение https://www.django-rest-framework.org/api-guide/generic-views/#listcreateapiview.

from rest_framework.generics import ListCreateAPIView
class TechnologyViewSet(ListCreateAPIView):

    queryset = Technology.objects.all()
    serializer_class = TechnologySerializer

Надеюсь, это поможет.

...