【问题标题】:Issues when define a Django Foreign Key from CharField DataType从 CharField DataType 定义 Django 外键时的问题
【发布时间】:2020-02-05 23:52:33
【问题描述】:

我是 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的模型Localities相关 在创建序列化程序以使用我得到的数据创建 json 时

class BedSerializer(ModelSerializer):

    class Meta:
        model = Stratigraphy
        fields = '__all__'
        depth = 1

当我使用邮递员尝试 api 时,它会显示 the following

class BedSerializer(ModelSerializer):

    class Meta:
        model = Stratigraphy
        fields = ('id','locality')

但如果我删除深度属性,它会显示the following

我做错了什么?

【问题讨论】:

    标签: json django api


    【解决方案1】:

    根据 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 表单相同:

    未能设置字段或排除在 3.3 版中引发了待决弃用警告,并在 3.4 中引发了弃用警告。它现在是强制性的。

    所以现在一定是:

    类 BedSerializer(ModelSerializer):

    class Meta:
        model = Stratigraphy
        fields = '__all__'
        depth = 1
    

    受此主题答案启发的答案: All fields in ModelSerializer django rest framework

    【讨论】:

      猜你喜欢
      • 2016-09-18
      • 2011-02-01
      • 2012-04-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      相关资源
      最近更新 更多