gpt4 book ai didi

python - 在 Django 和 Django REST Framework 中使用保留字 "class"作为字段名

转载 作者:太空狗 更新时间:2023-10-29 20:16:27 28 4
gpt4 key购买 nike

问题描述

分类学是根据共有特征定义和命名生物有机体组的科学。生物体被分组为分类单元(单数:分类单元),这些组被赋予分类等级。现代使用的主要等级是域、界、门、纲、目、科、属和种。有关 Taxonomy 的更多信息和 Taxonomic ranks在维基百科中。

按照 Wikipedia 的文章Taxonomic rank 中的red fox 示例,我需要创建这样的 JSON 输出:

{
"species": "vulpes",
"genus": "Vulpes",
"family": "Canidae",
"order": "Carnivora",
"<b>class</b>": "Mammalia",
"phylum": "Chordata",
"kingdom": "Animalia",
"domain": "Eukarya"
}

由于 Django REST Framework 根据字段名称创建键,分类等级 class(示例中的粗体)出现了问题,因为它是 Python 中的保留字,不能用作变量名。

我尝试过的

在 Django 中创建的模型类如下所示:

class Species(models.Model):
species = models.CharField()
genus = models.CharField()
family = models.CharField()
# class = models.CharField() - class is reserved word in Python
# class_ = models.CharField() - Django doesn't allow field names
# ending with underscore. That wouldn't be either a satisfying solution.
# further fields

问题

是否有任何可能的方法来解决这个问题并生成所需的输出?如果不是,解决此问题的最佳做法是什么?

最佳答案

您可以在 get_fields() 方法的重载版本中重命名字段

class MySerializer(serializers.Serializer):
class_ = serializers.ReadOnlyField()

def get_fields(self):
result = super().get_fields()
# Rename `class_` to `class`
class_ = result.pop('class_')
result['class'] = class_
return result

关于python - 在 Django 和 Django REST Framework 中使用保留字 "class"作为字段名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47630356/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com