我是 Django 的新手,我正在使用它创建一个小型 APIrest,情况是在定义应用程序模型时我得到了这个
class Localities(models.Model):
id = models.BigAutoField(primary_key=True)
field_id = models.CharField(unique=True, max_length=50,db_column='field_id')
class Meta:
managed = False
db_table = 'localities'
class Stratigraphy(models.Model):
id = models.BigAutoField(primary_key=True)
locality = models.ForeignKey(Localities, models.DO_NOTHING, blank=True, null=True, related_name='locality_id')
class Meta:
managed = False
db_table = 'stratigraphy'
地层学模型与查德菲尔德field_id
的产地模型相关 创建序列化程序以使用数据创建 JSON 时,我得到了这个
class BedSerializer(ModelSerializer):
class Meta:
model = Stratigraphy
fields = '__all__'
depth = 1
当我与邮递员一起尝试 API 时,它向我显示以下内容
class BedSerializer(ModelSerializer):
class Meta:
model = Stratigraphy
fields = ('id','locality')
但是如果我删除深度属性,它会显示以下内容
我做错了什么?
根据Django REST框架关于ModelSerializers的文档: https://www.django-rest-framework.org/api-guide/serializers/#modelserializer
默认情况下,类上的所有模型字段都将映射到相应的序列化程序字段。
这与 Django 的 ModelForms 不同,后者要求您指定特殊属性'__all__'
以利用所有模型字段。因此,所需要的只是声明模型。
class BedSerializer(ModelSerializer):
class Meta:
model = Stratigraphy
depth = 1
更新(对于版本>= 3.5( 上述行为在 3.3 版中已弃用,自 3.5 版起被禁止。
现在必须使用特殊属性">all"来使用 Django REST 框架中的所有字段,与 Django Forms 相同:
未能设置字段或排除会在版本 3.3 中引发挂起的弃用警告,并在 3.4 中引发弃用警告。它的使用现在是强制性的。
所以现在必须是:
类床序列化器(ModelSerializer(:
class Meta:
model = Stratigraphy
fields = '__all__'
depth = 1
受此主题答案启发的答案: ModelSerializer django rest 框架中的所有字段