每当我定义depth属性时,POST部分中swagger文档的外键字段就会消失。这似乎很奇怪,因为当我想要depth = 1请求中的相关数据时,我需要GET。因此,为了获得POST部分中的相关字段参数,我无法删除它。

就是这种情况。

型号:

from django.db import models
from django.conf import settings
# Create your models here.

User = settings.AUTH_USER_MODEL

class Todo(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField("Title", max_length=255)
    completed = models.BooleanField("Completed")

不带depth =1的序列化器
from rest_framework import serializers
from models import Todo

class TodoSerializer(serializers.HyperlinkedModelSerializer):
   class Meta:
       model = Todo

摇摇输出:
django-rest-framework - 在序列化器中添加depth属性后,外键字段在swagger文档中消失了-LMLPHP

现在,如果我添加depth = 1而不是,则Swagger不会显示相关字段
django-rest-framework - 在序列化器中添加depth属性后,外键字段在swagger文档中消失了-LMLPHP

让我知道是否有人对此有任何线索。

谢谢 :)

最佳答案

最后,在深入研究之后,我提出了解决方案,通过该解决方案,我们可以避免此问题并实现预期的解决方案。

因此,解决方案是“我们可以使用自身相关的序列化程序实例来代替depth = 1属性,而该实例化程序的工作方式类似于depth功能。”

这是经过测试的解决方案

型号:

from django.db import models
from django.conf import settings

User = settings.AUTH_USER_MODEL

class Todo(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField("Title", max_length=255)
    completed = models.BooleanField("Completed")

序列化器
from rest_framework import serializers
from django.conf import settings
from models import Todo

User = settings.AUTH_USER_MODEL


class UserSerializer(serializers.HyperlinkedSerializer):
    class Meta:
       model = User


class TodoSerializer(serializers.HyperlinkedModelSerializer):
   user = UserSerializer()

   class Meta:
      model = Todo
      fields = ('user', 'title', 'completed')

摇摇输出:
django-rest-framework - 在序列化器中添加depth属性后,外键字段在swagger文档中消失了-LMLPHP

为了实现所需的功能,此解决方案是一种不同的方法,但是我仍然期望django-rest-swagger团队提供正式的解决方案,即使我已经在django-rest-swagger github repo here上发布了相同的查询。

关于django-rest-framework - 在序列化器中添加depth属性后,外键字段在swagger文档中消失了,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34564760/

10-11 15:25