django - Slug 和重命名 Django Serializer 中的相同字段
问题描述
如果我正确(这是我使用它的方式)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
由于我已经声明它的事实,那么上面的内容会很好。这种失败的目的是因为现在我基本上通过两次发送相同的信息(作为容器和容器名称)。
如何返回字符串值(不是 id)containernameid
并将字段名称更改为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
解决方案
如果我正确理解了您的问题,那么StringRelatedField()
将适合您的上下文
class ProductContainersSerializer(serializers.ModelSerializer):
productid = serializers.StringRelatedField()
container = serializers.StringRelatedField(source='containernameid')
class Meta:
model = Productcontainers
fields = ('productid', 'container')
注意:
StringRelatedField
可用于使用其__unicode__
or__str__
方法表示关系的目标。
推荐阅读
- python - 如何在字符串中添加双引号使其看起来像 json?
- oracle - Oracle 日期时间函数问题
- algorithm - 证明递归行列式的复杂性
- javascript - 无法从 redux 状态渲染 props 的值
- php - 如何解决在 laravel 中调用 bool 上的成员函数部门()
- node.js - 如何使用 find 方法 express js 获取文档数量?
- sql - SQL:防止无效数据插入表的触发器
- mongodb - 如何仅匹配包含另一个数组的条件适用于数组中的所有文档的文档?
- javascript - TinyMCE 表:如何隐藏高级属性?
- ruby-on-rails - Rails Webpacker 在生产环境中编译错误