当前位置: 首页 > 面试题库 >

在Django和Django REST Framework中使用保留字“类”作为字段名称

於宾白
2023-03-14
问题内容

分类法是一门基于共有特征来定义和命名生物有机体的科学。将有机体分类为分类群(单数:分类群),并且将这些分类分类。现代使用的主要等级是域,王国,门,阶级,秩序,家庭,属和物种。Wikipedia中有关分类学和分类学等级的更多信息。

Wikipedia 中的 分类分类中*红狐狸 示例之后,我需要创建一个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")


 类似资料:
  • 问题内容: 除了MSSQL和SQLite之外,我还将扩展现有应用程序的数据层以与Firebird 2.5一起使用,但是我遇到了一个绊脚石。 我有一个名为TimeStamp的字段,该字段将数据/时间存储为TimeStamp类型。在类型为datetime的MSSQL和SQLite下,此方法可以正常工作,但在Firebird下适用。以下SQL: 似乎有效,但是TimeStamp字段以字段名称“ CONS

  • 问题内容: 这是一些简单的代码,但我只是不知道为什么我不能使用这个词作为表的实体 我意识到如果我使用key,我将无法使用“ key”,mysql将要求我检查语法,但是如果我使用“ id”或任何其他表,将会创建该表。 有人知道如何将实体名称创建为密钥吗?这并不重要,因为我只能使用id而不是key,但是由于我发现了此错误,所以我不知道是否有办法使它起作用。 问题答案: 您仍然可以使用。只要用反引号包起

  • 问题内容: 保留字可以用作对象的属性名称吗? 先前的堆栈溢出问题(浏览器支持在JavaScript中使用保留字作为属性名称)间接引发了此问题。答案似乎是AlexWayne的普遍共识: 您可以使用这些单词,但只能将其用作字符串,而不能用作速记属性。 虽然我认为他们在这方面可能比我了解更多,并且在某些情况下使用保留字可能不是一个 好主意 ,但基于两点,我认为他们的结论是错误的: 使用保留字作为“速记”

  • 问题内容: 在hibernate状态下使用sqlserver方言。 我希望hibernate在创建表时使用带引号的标识符。 除了重命名字段外,还有其他任何处理方法的想法吗? 问题答案: 遇到相同的问题,但表名为。如果你设定 然后所有数据库标识符将被引用。 在这里找到我的答案 表名称中的特殊字符hibernate给出错误 并在这里找到所有可用的设置 https://docs.jboss.org/hi

  • 问题内容: 有什么技巧可以将Java保留字用作变量,方法,类,接口,包或枚举常量名称? 问题答案: 不,没有办法。这就是为什么它们被标记为“保留”的原因。

  • 本文向大家介绍MySQL中字段名和保留字冲突的解决办法,包括了MySQL中字段名和保留字冲突的解决办法的使用技巧和注意事项,需要的朋友参考一下 我们知道通常的SQL查询语句是这么写的: 这当然没问题,但如果字段名是“from”呢? 若真的这么写,必然出错,当字段名与MySQL保留字冲突时,可以用字符“`”将字段名括起来: 总结 刚发现我原先设计的数据库表里有两个字段都用了保留字(add,comme