代码之家  ›  专栏  ›  技术社区  ›  Alfa Bravo

Slug并重命名Django序列化程序中的同一字段

  •  0
  • Alfa Bravo  · 技术社区  · 7 年前

    如果正确(这就是我使用它的方式),Django序列化器中的SlugRelatedField可以用于从外键字段的ID返回字符串值。 就像我说的我经常这么做。我还定期使用CharField将表中的字段名更改为其他名称。

    但是我怎么把这两个结合起来呢?到目前为止我得到的是:

    class ProductContainersSerializer(serializers.ModelSerializer):
    
        containernameid = serializers.SlugRelatedField(read_only=False, slug_field='containername', queryset=Productcontainernames.objects.all())
        container = serializers.CharField(source='containernameid')
        productid = serializers.SlugRelatedField(read_only=False, slug_field='productid', queryset=Productlist.objects.all())
    
    
        class Meta:
            model = Productcontainers
            fields = ('productid, 'container')
    

    模型有两个字段:

    class Productcontainers(models.Model):
        containernameid = models.ForeignKey(Productcontainernames, on_delete=models.CASCADE) 
        productid = models.ForeignKey(Productlist, on_delete=models.CASCADE) 
    

    如果不是因为我运行代码时它说我必须包含 containernameid 因为我已经宣布了。这样做的目的是失败的,因为现在我基本上通过两次(作为容器和容器名)发送相同的信息。

    如何返回的字符串值(不是id) 集装箱船 并将字段的名称更改为 container ?

    电流输出:错误-> The field 'containernameid' was declared on serializer ProductContainersSerializer, but has not been included in the 'fields' option.

    预期(期望)输出:

    0:{productid: "Prod1", container: "Box"}
    1:{productid: "Prod2", container: "Crate"}
    2:{productid: "Prod3", container: "Crate"}
    3:{productid: "Prod4", container: "Box"}  etc
    

    不以任何方式更改序列化程序的输出:

    0:{productid: 1, containernameid : 1}
    1:{productid: 2, containernameid : 2}
    2:{productid: 3, containernameid : 2}
    3:{productid: 4, containernameid : 1}  etc
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   JPG    7 年前

    如果我正确地理解了你的问题 StringRelatedField() 在你的背景下

    class ProductContainersSerializer(serializers.ModelSerializer):
        productid = serializers.StringRelatedField()
        container = serializers.StringRelatedField(source='containernameid')
    
        class Meta:
            model = Productcontainers
            fields = ('productid', 'container')
    



    注意 :
    StringRelatedField 可用于表示关系的目标 __unicode__ __str__ 方法。

    推荐文章