访问/api/customereport/出现ImproperlyConfigured错误求解决方案
问题描述
访问 /api/customereport/ 接口时出现此前不存在的 ImproperlyConfigured 错误,无法自行排查修复,请求协助解决,相关代码如下:
序列化器代码
class MeterSerializer(serializers.HyperlinkedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name="meter_reading:meters-list") customer_reports = CustomerReportSerializer(source='customerreport_set', many=True,read_only=True) class Meta: model = Meter fields = ['number','customer_reports','customer','url'] class CustomerReportSerializer(serializers.ModelSerializer): meter_no = serializers.SerializerMethodField(method_name='meter_num') customer_name = serializers.SerializerMethodField(method_name='cust_name') customer_number = serializers.SerializerMethodField(method_name='cust_number') class Meta: model = CustomerReport fields = ('meter_no','meter','customer_name','date','customer_unit','unit_rate','bill_amount','consumer_number','customer_number','pending_units',)
routers.py 代码
router.register('customer', CustomerViewSet) router.register('meters',MeterViewSet,basename='meters') router.register('issues',IssueViewSet) router.register('customereport',CustomerReportViewSet,basename='customerreport') # router.register('users',UserViewset) urlpatterns = router.urls
urls.py 代码
urlpatterns = [ path('', include(router.urls)), path('api-auth/', include('rest_framework.urls', namespace='rest_framework')), path('meter_access/', MeterAccess.as_view(),name='meter_access'), ]
排查修复方案
- 首先检查
MeterSerializer中HyperlinkedIdentityField指定的view_name="meter_reading:meters-list"是否符合实际路由配置:确认项目根urls.py包含当前app路由时是否指定了namespace="meter_reading",如果没有配置命名空间,直接把view_name改为"meters-list"即可。 - 检查
CustomerReportSerializer中定义的三个SerializerMethodField对应的方法是否存在:确认meter_num、cust_name、cust_number三个方法已经在该序列化器中实现,没有定义对应方法会直接触发配置错误。 - 检查
CustomerReportViewSet是否配置了queryset属性,或者是否重写了get_queryset方法:DRF的视图集如果没有指定查询集,即使手动设置了basename也会抛出ImproperlyConfigured错误。 - 检查
CustomerReport模型关联Meter的外键字段是否设置了related_name:如果设置了自定义的关联名称,MeterSerializer中source='customerreport_set'就需要改为你自定义的related_name值,默认反向关联名称才是模型名小写加_set。
内容的提问来源于stack exchange,提问作者Atif Shafi
相关产品推荐
相关产品推荐

