从 CharField 数据类型定义 Django 外键时的问题



我是 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 框架中的所有字段

最新更新