【问题标题】:Slug and rename the same field in Django SerializerSlug 和重命名 Django Serializer 中的相同字段
【发布时间】:2018-07-27 06:58:53
【问题描述】:

如果我正确(这是我使用它的方式)Django Serializer 中的 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,因为我已经声明了它,那么上面的内容可以正常工作。这种失败的目的,因为现在我基本上通过两次发送相同的信息(作为容器和容器名称)。

如何返回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

【问题讨论】:

  • 您能否将当前输出预期输出添加到问题中?
  • @JerinPeterGeorge:完成。
  • 可以加Productcontainers型号吗?
  • 为什么不将 'containernameid' 添加到 'fields' 中?
  • @Madi7 因为正如我的问题所述(您可以在序列化程序中看到),我想将containernameid 更改为containercontainernameid 应该变成 container 并显示 string 值,而不是 id

标签: django django-rest-framework


【解决方案1】:

如果我正确理解了您的问题,StringRelatedField() 将适合您的上下文

class ProductContainersSerializer(serializers.ModelSerializer):
    productid = serializers.StringRelatedField()
    container = serializers.StringRelatedField(source='containernameid')

    class Meta:
        model = Productcontainers
        fields = ('productid', 'container')



注意
StringRelatedField 可用于使用其__unicode____str__ 表示关系的目标方法。

【讨论】:

  • 感谢 JPG,您确实正确理解了我,而这正是我想要的。在某个地方,我想到SlugRelatedField 是获取 id 的字符串表示的方法,从那里我一直在寻找错误的信息。感谢您的大力帮助!
猜你喜欢
  • 2014-04-21
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
相关资源
最近更新 更多