【发布时间】:2018-08-06 18:50:50
【问题描述】:
最近,我将一个 django 应用程序从 Django 1.4 移到了 Django 1.11。我遇到了有关 field_to_native 的问题。我非常感谢任何提示。
原代码:
class LoopgroupDqHyperlinkedIdentityField(relations.HyperlinkedIdentityField):
def field_to_native(self, obj, field_name):
# copied from superclass
request = self.context.get('request', None)
format = self.format or self.context.get('format', None)
view_name = self.view_name or self.parent.opts.view_name
# new
lgdq_attrs = 'loopgroup_id', 'year', 'month'
view_kwargs = dict((X, getattr(obj, X)) for X in lgdq_attrs)
return RF_reverse(view_name,
kwargs=view_kwargs, request=request, format=format)
class LoopgroupDqSerializer(HyperlinkedModelSerializer):
url = LoopgroupDqHyperlinkedIdentityField()
class Meta:
model = LoopgroupDq
fields = tuple(X.name for X in LoopgroupDq._meta.fields) + ('url',)
系统返回如下错误
LoopgroupDqSerializer 中的文件“/srv/projects/python/dotfreewaydata/dataquality/serializers.py”,第 43 行
url = LoopgroupDqHyperlinkedIdentityField()
init 中的文件“/srv/virtual_environments/dotfreewaydata/local/lib/python2.7/site-packages/rest_framework/relations.py”,第 408 行
断言 view_name 不是 None,'view_name 参数是必需的。'
AssertionError:view_name 参数是必需的。
我在谷歌上搜索了这条错误消息,发现 field_to_native 在 Django Rest Framework 3.0 中已被弃用。
在http://www.django-rest-framework.org/topics/3.0-announcement/ 他们提到了
1) field_from_native() 和 field_to_native() 方法被移除。
2)现在,如果您需要访问整个对象,则需要覆盖以下一项或两项:
使用 get_attribute 修改传递给 to_representation() 的属性值。 使用get_value修改传递给_internal_value()的数据值。
该网站提供了一些简单的示例。然而,我不明白。
谁能告诉我如何将“field_to_native”修改为“get_attribute”和“get_value”等等。
【问题讨论】:
标签: python django django-rest-framework