代码之家  ›  专栏  ›  技术社区  ›  Hari Krishnan

如何访问Django ForeignKey模型字段?

  •  0
  • Hari Krishnan  · 技术社区  · 7 年前

    我有两个django模型

    class A(models.Model):
        aname = models.CharField(max_length=64, verbose_name='name')
    

    和型号B

    class B(models.Model):
        bname = models.CharField(max_length=64, verbose_name='name')
        mod = models.ForeignKey(A, related_name='a_b',null=True,on_delete=models.CASCADE)
    

    模型B的序列化程序是

    class BSerializer(serializers.ModelSerializer):
    mod= ASerializer(many=False, read_only=True)
    class Meta:
        model = B
        fields = (','id','bname','mod.aname')
    

    阿纳姆 要使用模型B的序列化程序访问的模型A的字段。使用mod。aname不起作用。上面写着

    字段名称 mod.aname B .

    我该怎么做?

    2 回复  |  直到 7 年前
        1
  •  3
  •   binpy    7 年前

    这个怎么样?使用参数 source 在…内 serializers.CharField

    class BSerializer(serializers.ModelSerializer):
        mod = serializers.CharField(
            source='mod.aname',
            read_only=True
        )
    
        class Meta:
            model = B
            fields = ('id','bname','mod')
    
        2
  •  0
  •   DragonBobZ    7 年前

    当以字符串形式引用相关模型的字段时,请使用两个下划线,如 'mod__aname' .

    class HotelSerializer(serializers.ModelSerializer):
        mod= ASerializer(many=False, read_only=True)
    
        class Meta:
            model = Hotel
            fields = ('id','bname','mod__aname')
    

    如果出现以下情况,则此操作应该有效 ASerializer 看起来像这样:

    class ASerializer(serializers.ModelSerializer):
    
        class Meta:
            model = A
            fields = '__all__'