gpt4 book ai didi

django - 名为 url 的模型字段和 django rest 框架 url

转载 作者:行者123 更新时间:2023-12-04 16:39:54 25 4
gpt4 key购买 nike

几天前我开始使用很棒的 django-rest-framework。
我无法解决这个简单的问题。

我的模型包含一个名为 url 的 models.URLField。

我的 serializers.py 文件:

class ModelSerializer(serializers.HyperlinkedModelSerializer):
owner = serializers.Field(source='owner.username')

class Meta:
model = Model
fields = ('url', 'owner', 'title', 'abstract', 'category', 'position', 'param1')

检查 API 结果,字段 'url' 填充了 model.URLField。
"results": [
{
"url": "http://www.web.com",
"owner": "me",
"title": "title of the stuff"
}

相反,我想拥有
"results": [
{
"url": "http://localhost:8000/en/apiv1/maps/4/",
"url_in_model": "http://www.web.com",
"owner": "me",
"title": "Forest fire"
}

我该如何解决?
谢谢

最佳答案

它可能被认为是糟糕的形式(我绝不是专业程序员或 rest_framework 专家),但我相信您可以为序列化输出添加额外的上下文:

http://django-rest-framework.org/api-guide/serializers.html#specifying-fields-explicitly

class AccountSerializer(serializers.ModelSerializer):
url = serializers.CharField(source='get_absolute_url', read_only=True)
groups = serializers.PrimaryKeyRelatedField(many=True)

class Meta:
model = Account

额外的字段可以对应于模型上的任何属性或可调用的。

所以在上面的字段 'get_absolute_url' 必须在 'Account' 模型中。
在你的情况下(我认为)你可以这样做:
class ModelSerializer(serializers.HyperlinkedModelSerializer):
owner = serializers.Field(source='owner.username')
url_in_model = serializer.Field(source='url')

class Meta:
model = Model
fields = ('url', 'url_in_model', 'owner', 'title', 'abstract', 'category', 'position', 'param1')

当然,您会选择适合的字段类型。

我没有机会对此进行测试,因此使用“url”作为您的来源可能会导致问题,您可能想将模型字段命名为其他名称 - 如果是这种情况,我很抱歉,我浪费了您的时间。

希望我有所帮助。

关于django - 名为 url 的模型字段和 django rest 框架 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18231887/

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