问题描述
分类学是根据共有的特征来定义和命名生物有机体群的科学。有机体被组合成分类群(单数:分类群),并且这些分类群被给予分类等级。现代使用的主要等级是域、王国、门、类、目、科、属和种。
有关维基百科中TaxonomyTaxonomic ranks的更多信息。
下面是在维基百科的TaxonomicRank一文中红狐的例子,我需要创建这样的JSON输出:

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

由于django rest框架基于字段名创建键,所以分类排名类(示例中为粗体)出现了问题,因为它是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

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

最佳答案

你可以像下面这样做

class SpeciesSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Species
        fields = (
            'url', 'id', 'canonical_name', 'slug',  'species', 'genus',
            'subfamily', 'family', 'order','class', 'phylum',
            'ncbi_id', 'ncbi_taxonomy',
        )
        read_only_fields = ('slug',)
        extra_kwargs = {
            'url': {'lookup_field': 'slug'}
        }

SpeciesSerializer._declared_fields["class"] = serializers.CharField(source="class_name")

如以下答案所述
https://stackoverflow.com/a/47717441/2830850

08-24 17:16