如果我正确(这就是我的使用方式),则可以使用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
的事实,则上面的命令就可以正常工作。这种目的无法实现,因为现在我基本上通过两次发送相同的信息(如container和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
答案 0 :(得分:2)
如果我正确理解了您的问题,那么StringRelatedField()
会适合您的情况
class ProductContainersSerializer(serializers.ModelSerializer):
productid = serializers.StringRelatedField()
container = serializers.StringRelatedField(source='containernameid')
class Meta:
model = Productcontainers
fields = ('productid', 'container')
注意:
StringRelatedField
可用于通过其__unicode__
或__str__
方法表示关系的目标。