Django rest framework Django Rest框架过滤器:AttributeError:';非类型';对象没有属性';更新';
我正在使用Django Rest框架过滤器(DRFF)。 我有这两个模型定义:Django rest framework Django Rest框架过滤器:AttributeError:';非类型';对象没有属性';更新';,django-rest-framework,django-rest-framework-filters,Django Rest Framework,Django Rest Framework Filters,我正在使用Django Rest框架过滤器(DRFF)。 我有这两个模型定义: class Release(models.Model): application = models.ForeignKey(Application, on_delete=models.CASCADE, related_name='releases') price = models.FloatField(default=0.0) version_code = models.Inte
class Release(models.Model):
application = models.ForeignKey(Application, on_delete=models.CASCADE,
related_name='releases')
price = models.FloatField(default=0.0)
version_code = models.IntegerField()
class Application(models.Model):
package_name = models.CharField(max_length=144, unique=True)
description = models.TextField()
class ApplicationSerializer(serializers.ModelSerializer):
releases = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = Application
fields = '__all__'
class ReleaseSerializer(serializers.ModelSerializer):
class Meta:
model = Release
fields = '__all__'
class ApplicationViewSet(viewsets.ModelViewSet):
queryset = Application.objects.all()
serializer_class = ApplicationSerializer
filter_class = ApplicationFilter
class ReleaseViewSet(viewsets.ModelViewSet):
queryset = Release.objects.all()
serializer_class = ReleaseSerializer
filter_class = ReleaseFilter
class ReleaseFilter(filters.FilterSet):
class Meta:
model = Release
fields = {
'price': '__all__',
'version_code': '__all__',
}
class ApplicationFilter(filters.FilterSet):
releases = filters.RelatedFilter(
ReleaseFilter,
queryset=Release.objects.all()
)
class Meta:
model = Application
fields = {
'package_name': '__all__',
}
正如您所见,一个应用程序有许多版本都具有related_name='Releases'。
因此,我有两个序列化程序:
class Release(models.Model):
application = models.ForeignKey(Application, on_delete=models.CASCADE,
related_name='releases')
price = models.FloatField(default=0.0)
version_code = models.IntegerField()
class Application(models.Model):
package_name = models.CharField(max_length=144, unique=True)
description = models.TextField()
class ApplicationSerializer(serializers.ModelSerializer):
releases = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = Application
fields = '__all__'
class ReleaseSerializer(serializers.ModelSerializer):
class Meta:
model = Release
fields = '__all__'
class ApplicationViewSet(viewsets.ModelViewSet):
queryset = Application.objects.all()
serializer_class = ApplicationSerializer
filter_class = ApplicationFilter
class ReleaseViewSet(viewsets.ModelViewSet):
queryset = Release.objects.all()
serializer_class = ReleaseSerializer
filter_class = ReleaseFilter
class ReleaseFilter(filters.FilterSet):
class Meta:
model = Release
fields = {
'price': '__all__',
'version_code': '__all__',
}
class ApplicationFilter(filters.FilterSet):
releases = filters.RelatedFilter(
ReleaseFilter,
queryset=Release.objects.all()
)
class Meta:
model = Application
fields = {
'package_name': '__all__',
}
这两个视图集:
class Release(models.Model):
application = models.ForeignKey(Application, on_delete=models.CASCADE,
related_name='releases')
price = models.FloatField(default=0.0)
version_code = models.IntegerField()
class Application(models.Model):
package_name = models.CharField(max_length=144, unique=True)
description = models.TextField()
class ApplicationSerializer(serializers.ModelSerializer):
releases = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = Application
fields = '__all__'
class ReleaseSerializer(serializers.ModelSerializer):
class Meta:
model = Release
fields = '__all__'
class ApplicationViewSet(viewsets.ModelViewSet):
queryset = Application.objects.all()
serializer_class = ApplicationSerializer
filter_class = ApplicationFilter
class ReleaseViewSet(viewsets.ModelViewSet):
queryset = Release.objects.all()
serializer_class = ReleaseSerializer
filter_class = ReleaseFilter
class ReleaseFilter(filters.FilterSet):
class Meta:
model = Release
fields = {
'price': '__all__',
'version_code': '__all__',
}
class ApplicationFilter(filters.FilterSet):
releases = filters.RelatedFilter(
ReleaseFilter,
queryset=Release.objects.all()
)
class Meta:
model = Application
fields = {
'package_name': '__all__',
}
我有两个过滤器(使用DRFF):
class Release(models.Model):
application = models.ForeignKey(Application, on_delete=models.CASCADE,
related_name='releases')
price = models.FloatField(default=0.0)
version_code = models.IntegerField()
class Application(models.Model):
package_name = models.CharField(max_length=144, unique=True)
description = models.TextField()
class ApplicationSerializer(serializers.ModelSerializer):
releases = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = Application
fields = '__all__'
class ReleaseSerializer(serializers.ModelSerializer):
class Meta:
model = Release
fields = '__all__'
class ApplicationViewSet(viewsets.ModelViewSet):
queryset = Application.objects.all()
serializer_class = ApplicationSerializer
filter_class = ApplicationFilter
class ReleaseViewSet(viewsets.ModelViewSet):
queryset = Release.objects.all()
serializer_class = ReleaseSerializer
filter_class = ReleaseFilter
class ReleaseFilter(filters.FilterSet):
class Meta:
model = Release
fields = {
'price': '__all__',
'version_code': '__all__',
}
class ApplicationFilter(filters.FilterSet):
releases = filters.RelatedFilter(
ReleaseFilter,
queryset=Release.objects.all()
)
class Meta:
model = Application
fields = {
'package_name': '__all__',
}
我的RESTAPI正在本地主机上运行:9000/API/v1/
但是,当我尝试查看应用程序视图时(在浏览器中:“GET/api/v1/Application/”),我得到了
此错误:“AttributeError:'NoneType'对象没有属性'update'”
这是此错误的回溯:
Internal Server Error: /api/v1/application/
Traceback (most recent call last):
File "/home/jfsanchez/Projects/kiosko/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/home/jfsanchez/Projects/kiosko/lib/python3.5/site-packages/django/core/handlers/base.py", line 217, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/jfsanchez/Projects/kiosko/lib/python3.5/site-packages/django/core/handlers/base.py", line 215, in _get_response
response = response.render()
File "/home/jfsanchez/Projects/kiosko/lib/python3.5/site-packages/django/template/response.py", line 107, in render
self.content = self.rendered_content
File "/home/jfsanchez/Projects/kiosko/lib/python3.5/site-packages/rest_framework/response.py", line 72, in rendered_content
ret = renderer.render(self.data, accepted_media_type, context)
File "/home/jfsanchez/Projects/kiosko/lib/python3.5/site-packages/rest_framework/renderers.py", line 706, in render
context = self.get_context(data, accepted_media_type, renderer_context)
File "/home/jfsanchez/Projects/kiosko/lib/python3.5/site-packages/rest_framework/renderers.py", line 683, in get_context
'filter_form': self.get_filter_form(data, view, request),
File "/home/jfsanchez/Projects/kiosko/lib/python3.5/site-packages/rest_framework/renderers.py", line 618, in get_filter_form
html = backend().to_html(request, queryset, view)
File "/home/jfsanchez/Projects/kiosko/lib/python3.5/site-packages/django_filters/rest_framework/backends.py", line 61, in to_html
filter_instance = filter_class(request.query_params, queryset=queryset, request=request)
File "/home/jfsanchez/Projects/kiosko/lib/python3.5/site-packages/django_filters/filterset.py", line 186, in __init__
self.filters = copy.deepcopy(self.base_filters)
File "/usr/lib/python3.5/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/lib/python3.5/copy.py", line 320, in _reconstruct
value = deepcopy(value, memo)
File "/usr/lib/python3.5/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/lib/python3.5/copy.py", line 297, in _reconstruct
state = deepcopy(state, memo)
File "/usr/lib/python3.5/copy.py", line 155, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.5/copy.py", line 243, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/lib/python3.5/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/lib/python3.5/copy.py", line 297, in _reconstruct
state = deepcopy(state, memo)
File "/usr/lib/python3.5/copy.py", line 155, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.5/copy.py", line 243, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/lib/python3.5/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/lib/python3.5/copy.py", line 297, in _reconstruct
state = deepcopy(state, memo)
File "/usr/lib/python3.5/copy.py", line 155, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.5/copy.py", line 243, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/lib/python3.5/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/lib/python3.5/copy.py", line 297, in _reconstruct
state = deepcopy(state, memo)
File "/usr/lib/python3.5/copy.py", line 155, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.5/copy.py", line 243, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/lib/python3.5/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/lib/python3.5/copy.py", line 297, in _reconstruct
state = deepcopy(state, memo)
File "/usr/lib/python3.5/copy.py", line 155, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.5/copy.py", line 243, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/lib/python3.5/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/lib/python3.5/copy.py", line 297, in _reconstruct
state = deepcopy(state, memo)
File "/usr/lib/python3.5/copy.py", line 155, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.5/copy.py", line 243, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/lib/python3.5/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/lib/python3.5/copy.py", line 297, in _reconstruct
state = deepcopy(state, memo)
File "/usr/lib/python3.5/copy.py", line 155, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.5/copy.py", line 243, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/lib/python3.5/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/lib/python3.5/copy.py", line 306, in _reconstruct
y.__dict__.update(state)
AttributeError: 'NoneType' object has no attribute 'update'
[09/Nov/2017 14:49:29] "GET /api/v1/application/ HTTP/1.1" 500 664601
这是我(主要)的VirtualNV堆栈:
Django==1.11.4
django-filters==0.2.1
djangorestframework==3.6.4
djangorestframework-filters==0.10.2
有人能帮我修一下吗?
这里有什么问题?我做错了什么?
谢谢 你有什么解决办法吗?我在render json_api_meta.update(self.extract_root_meta(serializer,serializer_data))AttributeError中的第569行得到了这个结果:“NoneType”对象没有属性“update”,您得到了任何解决方案吗?我在render json_api_meta.update(self.extract_root_meta(serializer,serializer_data))AttributeError中的第569行得到了这个结果:“NoneType”对象没有属性“update”