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后,我可以这样做。