Django rest framework 在序列化程序中添加深度属性后,外键字段在swagger文档中消失

Django rest framework 在序列化程序中添加深度属性后,外键字段在swagger文档中消失,django-rest-framework,swagger,Django Rest Framework,Swagger,每当我定义depth属性时,POST部分中的swagger docs中的外键字段就会消失。这似乎很奇怪,因为我需要GET请求中的相关数据时需要depth=1。因此,为了在POST部分中获取此相关字段参数,我无法删除此项 情况就是这样 型号: from django.db import models from django.conf import settings # Create your models here. User = settings.AUTH_USER_MODEL class

每当我定义
depth
属性时,POST部分中的swagger docs中的外键字段就会消失。这似乎很奇怪,因为我需要
GET
请求中的相关数据时需要
depth=1
。因此,为了在
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")
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")
序列化程序不带
depth=1

from rest_framework import serializers
from models import Todo

class TodoSerializer(serializers.HyperlinkedModelSerializer):
   class Meta:
       model = Todo
招摇输出:

现在,如果我添加
depth=1
,Swagger不会显示相关字段。

如果有人对此有任何线索,请告诉我


谢谢:)

您需要按如下方式更新序列化程序

class TodoSerializer(serializers.HyperlinkedModelSerializer):
creator = serializers.RelatedField(queryset=User.objects.all())

class Meta:
    model = Todo
    fields = ("name", "task", "creator")
    depth = 1

您需要在序列化程序中提到字段和RelatedField。最后,在深入研究之后,我提出了一个解决方案,通过它我们可以避免这个问题并实现预期的解决方案

因此,解决方案是“不使用
depth=1
属性,我们可以使用相关的序列化程序实例本身,它的工作原理类似于
depth
功能。”

这里是经过测试的解决方案

型号:

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")
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-swagger
团队的正式解决方案,即使我已经在django rest-swagger-github-repo上发布了相同的查询

一种解决方案是不使用
深度
并覆盖
到序列化程序的表示方法

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

    def to_representation(self, instance):
        r = super(TodoSerializer, self).to_representation(instance)
        r.update({'user': UserSerializer().to_representation(instance.user)})
        return r

这样,在post中,一切都将保持原样,在get中,当返回
todo
的json时,将调用
to_表示法
,并将用户添加到json数据中。

谢谢,让我检查一下并让您知道。这不起作用,因为它给出了此错误
RelatedField.to_表示法()必须为字段用户实现。如果您不需要支持写操作,您可能希望将
ReadOnlyField`改为子类。`我也不想更改字段名,因为它将在POST请求中使用。我在POST请求中也遇到了这个问题,可浏览的api中没有显示外键。在删除depth=1后,我可以这样做。