Python Django Rest框架不';t render generics.ListAPIView,带有GM2MField的模型
首先,对不起,我的英语不是我的母语 我有下一个问题: 我在Django应用程序中工作,我有这样一个模型:Python Django Rest框架不';t render generics.ListAPIView,带有GM2MField的模型,python,django,django-models,django-rest-framework,Python,Django,Django Models,Django Rest Framework,首先,对不起,我的英语不是我的母语 我有下一个问题: 我在Django应用程序中工作,我有这样一个模型: class AlarmEvent(models.Model): # Alarm types USER = 'US' DEVICE = 'DV' NO_DEVICE = 'ND' ALARM_CHOICES = ( (USER, 'User'), (DEVICE, 'Device'), (NO_DEVICE, 'No-Device') ) alarm = m
class AlarmEvent(models.Model):
# Alarm types
USER = 'US'
DEVICE = 'DV'
NO_DEVICE = 'ND'
ALARM_CHOICES = (
(USER, 'User'),
(DEVICE, 'Device'),
(NO_DEVICE, 'No-Device')
)
alarm = models.ForeignKey(Alarm, on_delete=models.CASCADE, null=True)
alarm_type = models.CharField(max_length=2, choices=ALARM_CHOICES, default=USER)
created = models.DateTimeField(auto_now_add=True)
finished = models.DateTimeField(null=True)
content_type = GM2MField()
description = models.CharField(max_length=255, default='description', null=True)
def __str__(self):
return self.alarm_type + '-' + str(self.pk)
如您所见,我使用第三方应用程序中的GM2MField()来建立通用的M2M关系。
对于此模型,我有以下序列化程序:
class AlarmEventSerializer(serializers.ModelSerializer):
class Meta:
model = AlarmEvent
fields = ('id', 'alarm', 'alarm_type', 'created', 'finished', 'device', 'variables', 'content_type', 'description')
我正在使用此视图:
class AlarmEventList(generics.ListAPIView):
''' List AlarmEvents by filters, or create a new AlarmEvent '''
serializer_class = AlarmEventSerializer
filter_backends = (filters.DjangoFilterBackend, )
filter_class = AlarmEventFilter
def get_queryset(self):
''' Getting events which the user is subscribed '''
#TODO: Fix api/alarms/events endpoint
alarms = Subscription.objects.filter(Q(user__in=[self.request.user]) | Q(group__in=self.request.user.groups.all())).values_list('alarm', flat=True)
return AlarmEvent.objects.filter(alarm__in=alarms)
def post(self, request, format=None):
''' Create new event '''
serializer = AlarmEventSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
我的问题是下一个错误:
环境:
请求方法:获取请求URL:
Django版本:2.0.3 Python版本:3.6.3已安装的应用程序:
['alarms'、'fotuto_models'、'rest_framework'、'django_filters',
“监护人”、“护卫员”、“django.contrib.admin”,
'django.contrib.auth'、'django.contrib.contenttypes'、'gm2m',
'django.contrib.sessions'、'django.contrib.messages',
“django.contrib.staticfiles”]已安装的中间件:
['corsheaders.middleware.corsmidleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.security.SecurityMiddleware',
“django.contrib.sessions.middleware.SessionMiddleware”,
'django.middleware.common.CommonMiddleware',
“django.middleware.csrf.CsrfViewMiddleware”,
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.xframeoptions中间件']
模板错误:在模板中
/usr/local/lib/python3.6/dist-packages/rest\u framework/templates/rest\u framework/horizontal/select\u multiple.html,
第15行“非类型”对象没有属性“\u meta”5时出错:
6:7:{%if field.label%}8:9:{field.label}}10:
11:{%endif%}12:13:14:15:{%for select in field.iter_options%} 16:{%if select.start_option_group%}17:
18:{%elif select.end\u option\u group%}19:20:
{%else%}21:{{ select.display_text}}22:{%endif%}23:
{%empty%}24:{{no_items}}25: {%endfor%} 回溯: 文件 “/usr/local/lib/python3.6/dist-packages/django/core/handlers/exception.py” 在内部 35响应=获取响应(请求) 文件 “/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py” 你得到了什么回应 158response=self.process\u异常\u由\u中间件(e,请求) 文件 “/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py” 你得到了什么回应 156response=response.render() 文件 “/usr/local/lib/python3.6/dist-packages/django/template/response.py” 渲染中 106self.content=自渲染内容 文件 中的“/usr/local/lib/python3.6/dist packages/rest\u framework/response.py” 渲染内容 72ret=renderer.render(self.data、接受的媒体类型、上下文) 文件 “/usr/local/lib/python3.6/dist packages/rest\u framework/renders.py” 渲染中 718context=self.get\u context(数据、接受的\u媒体\u类型、渲染器\u context) 文件 “/usr/local/lib/python3.6/dist packages/rest\u framework/renders.py” 在get_上下文中 691. 'post_表单:self.get_rendered_html_表单(数据、视图、“post”、请求) 文件 “/usr/local/lib/python3.6/dist packages/rest\u framework/renders.py” 以get_rendered_html_形式 514返回self.render\u form\u for\u序列化程序(序列化程序) 文件 “/usr/local/lib/python3.6/dist packages/rest\u framework/renders.py” 以呈现形式为序列化程序呈现 524{'style':{'template_pack':'rest_framework/horizontal'} 文件 “/usr/local/lib/python3.6/dist packages/rest\u framework/renders.py” 渲染中 375返回template.render(上下文) 文件 “/usr/local/lib/python3.6/dist-packages/django/template/backends/django.py” 渲染中 61返回self.template.render(上下文) 文件“/usr/local/lib/python3.6/dist-packages/django/template/base.py” 渲染中 175返回self.\u呈现(上下文) 文件“/usr/local/lib/python3.6/dist-packages/django/template/base.py” 在渲染中 167返回self.nodelist.render(上下文) 文件“/usr/local/lib/python3.6/dist-packages/django/template/base.py” 渲染中 943位=节点。带注释的渲染(上下文) 文件“/usr/local/lib/python3.6/dist-packages/django/template/base.py” 在render_注释中 910返回self.render(上下文) 文件 “/usr/local/lib/python3.6/dist-packages/django/template/defaulttags.py” 渲染中 211nodelist.append(node.render_注释(上下文)) 文件“/usr/local/lib/python3.6/dist-packages/django/template/base.py” 在render_注释中 910返回self.render(上下文) 文件 “/usr/local/lib/python3.6/dist-packages/django/template/defaulttags.py” 渲染中 314返回nodelist.render(上下文) 文件“/usr/local/lib/python3.6/dist-packages/django/template/base.py” 渲染中 943位=节点。带注释的渲染(上下文) 文件“/usr/local/lib/python3.6/dist-packages/django/template/base.py” 在render_注释中 910返回self.render(上下文) 文件 中的“/usr/local/lib/python3.6/dist-packages/django/template/library.py” 提供 192输出=self.func(*已解析参数,**已解析参数) 文件 “/usr/local/lib/python3.6/dist packages/rest\u framework/templatetags/rest\u framework.py” 在render_字段中 90返回渲染器。渲染_字段(字段,样式) 文件 “/usr/local/lib/python3.6/dist packages/rest\u framework/renders.py” 在render_字段中 354返回te