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

如何在Django REST Framework中更改字段名称

胥玮
2023-03-14
问题内容

我正在尝试像SQL中的别名一样更改DRF序列化器中的“模型”字段名称。我尝试了不同的方法,但无法成功。

models.py

class Park(models.Model):
    name = models.CharField(max_length=256)
    alternate_name = models.CharField(max_length=256, blank=True)
    objects = models.GeoManager()

    class Meta:
        db_table = u'p_park'

    def __unicode__(self):
        return '%s' % self.name

    def alias_alternate_name(self):
        return self.alternate_name

serializers.py

class ParkSerializer(serializers.ModelSerializer):

    location = serializers.Field(source='alias_alternate_name')
    #location = serializers.SerializerMethodField(source='alias_alternate_name')

    #alternate_name as location


    class Meta:
        model = Park
        fields = ('id', 'name', 'location')

我也曾尝试在Django Queryset中添加别名,但无法更改。

更新

这是我面临的例外

/ ViewName /’模块’对象上的AttributeError没有属性’Field’

我怎样才能做到这一点?


问题答案:

序列化程序字段中有一个非常好的功能,而序列化程序通常称为“源”,你可以在其中指定来自模型字段的数据源。

class ParkSerializer(serializers.ModelSerializer):
    location = serializers.SomeSerializerField(source='alternate_name')

    class Meta:
        model = Park
        fields = ('other_fields', 'location')

如模型所建议的,其中serializers.SomeSerializerField可以是serializers.CharField,但也可以由其他任何字段组成。你也可以放置关系字段和其他序列化器,这仍然可以像魅力一样工作。即,即使alternate_name是另一个模型的外键字段。

class ParkSerializer(serializers.ModelSerializer):
    locations = AlternateNameSerializer(source='alternate_name', many=true)

    class Meta:
        model = Park
        fields = ('other_fields', 'locations')

class AlternateNameSerializer(serializers.ModelSerialzer):
    class Meta:
        model = SomeModel

这也适用于请求的创建,删除和修改类型。它有效地创建了序列化器中字段名称和模型中字段名称的一对一映射。



 类似资料:
  • 问题内容: 我正在使用杰克逊将我的对象转换为json。该对象具有2个字段: 由于我想将其与jQuery自动完成功能一起使用,因此我希望“ id”在json中显示为“ value”,在“ name”中显示为“ label”。杰克逊的文档不明确这一点,我已经想尽注释,甚至远程好像它做什么,我需要,但我不能让显示为,并显示为在JSON。 有谁知道该怎么做或是否可能? 问题答案: 您是否尝试过使用@Jso

  • 问题内容: 对于此目标页面(对不起,但是SO不允许超链接到62.0.54.118): ,我想在默认情况下使用用户脚本更改名称字段。 输入为: 我想将其更改为: 也就是说,我想默认将输入的字段更改为。 我尝试编写一个脚本,(不起作用): 另外,该页面是Ajax驱动的页面。 请修复错误的脚本或帮助我编写另一个脚本,谢谢。 更新: 我通过将脚本的一行更改为来解决了部分问题: 至 然后我的脚本效果更好。感

  • 我很难更改列名。我知道我的语法是正确的,但我收到了一条错误消息。 我使用的语法是: 我一直收到这个错误消息,错误1064(42000):您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解第2行“COLUMN CustomerID to CollaboratorID”附近使用的正确语法 请帮忙。

  • 我在javaFX中有一个文本字段,在该字段中键入的任何内容都必须以蓝色显示,这可以通过css实现吗?如果是,那么如何?

  • 问题内容: 场景 :考虑我有一个JSON文档,如下所示: 问题:我想更改文档中字段的顺序/顺序,说我要,然后最后一次。 到目前为止,我将值存储在临时变量中,删除该字段并重新创建相同的字段。由于重新分配不起作用:( 我是通过以下方式做到的: 这样我将获得所需的有序JSON文档。这项要求很特殊,但我仍然需要一些有效的解决方案 问题 :有人可以通过有效的方法来帮助实现这一目标吗? 问题答案: 可能是您可

  • 问题内容: 我有一个小项目,必须响应一些文件。我知道使用会是一个更好的决定,但是文件很小。 我程序的一部分: 该行返回的文件名类似,没有任何格式或类似形式。已下载的文件名始终相同,并不取决于文件的真实名称。文件的真实名称是。如何返回带有正确文件名的文件? 问题答案: 你需要为浏览器设置HTTP标头以使用正确的文件名。 你可以通过设置参数来设置此标头。然后从传入的文件对象中获取文件名。使用参数显式设