首先,对不起我的英语,但这不是我的母语 .

我有下一个问题:我正在使用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 = 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():django-gm2m来获得通用的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)

我的问题是下一个错误:

环境:请求方法:GET请求URL:http://127.0.0.1:8000 / api / alarms / events / Django版本:2.0.3 Python版本:3.6.3已安装的应用程序:['alarms','fotuto_models', 'rest_framework','django_filters','guardian','corsheaders','django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','gm2m','django.contrib.sessions ','django.contrib.messages','django.contrib.staticfiles']已安装的中间件:['corsheaders.middleware.CorsMiddleware','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.XFrameOptionsMiddleware']模板错误:在模板/usr/local/lib/python3.6/dist-packages/rest_framework/templates/rest_framewor k / horizontal / select_multiple.html,第15行的错误'NoneType'对象没有属性'_meta'5:6:7:{%if field.label%} 8:9:{} 10:11 :{%endif%} 12:13:14:15:{%for field in field.iter_options%} 16:{%if select.start_option_group%} 17:18:{%elif select.end_option_group%} 19:20: {%else%} 21:{} 22:{%endif%} 23:{%empty%} 24:{} 25:{%endfor%}回溯:文件“/ usr / local /lib/python3.6/dist-packages/django/core/handlers/exception.py“在内部35. response = get_response(request)文件”/usr/local/lib/python3.6/dist-packages/django/ core / handlers / base.py“in _get_response 158. response = self.process_exception_by_middleware(e,request)File”/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py“in _get_response 156. response = response.render()文件“/usr/local/lib/python3.6/dist-packages/django/template/response.py”在渲染106中.self.content = self.rendered_content文件“/ usr /local/lib/python3.6/dist-packages/rest_framework/response.py“in rendered_content 72. ret = renderer.render(self.data,accepted_media_type,context)File”/usr/local/lib/python3.6/ dist-packages / rest_framework / renderers.py“in render 718. context = self.get_context(data,accepted_media_type,renderer_context)File”/usr/local/lib/python3.6/dist-packages/rest_framework/renderers.py“in get_context 691.'posn_form':self_get_rendered_html_form(data,view,'POST',request),get_rendered_html_form 514中的文件“/usr/local/lib/python3.6/dist-packages/rest_framework/renderers.py” . self.render_form_for_serializer(serializer)文件“/usr/local/lib/python3.6/dist-packages/rest_framework/renderers.py”在render_form_for_serializer 524中 . {'style':{'template_pack':'rest_framework / horizontal'}}在渲染375中输入文件“/usr/local/lib/python3.6/dist-packages/rest_framework/renderers.py” . 返回template.render(context)文件“/usr/local/lib/python3.6/dist-packages /django/template/backends/django.py”在渲染61.返回self.template.render(context)文件“/usr/local/lib/python3.6/dist-packages/django/template/base.py”在渲染175. return self._render(context)File _render 167.中的“/usr/local/lib/python3.6/dist-packages/django/template/base.py”返回self.nodelist.render(context)文件“/usr/local/lib/python3.6/ dist-packages / django / template / base.py“in render 943. bit = node.render_annotated(context)File”/usr/local/lib/python3.6/dist-packages/django/template/base.py“in render_annotated 910. return self.render(context)文件“/usr/local/lib/python3.6/dist-packages/django/template/defaulttags.py”在渲染211. nodelist.append(node.render_annotated(context))在render_annotated 910中输入文件“/usr/local/lib/python3.6/dist-packages/django/template/base.py” . 返回self.render(context)文件“/usr/local/lib/python3.6/dist -packages / django / template / defaulttags.py“in render 314. return nodelist.render(context)File”/usr/local/lib/python3.6/dist-packages/django/template/base.py“in render 943.比特=node.render_annotated(context)文件“/usr/local/lib/python3.6/dist-packages/django/template/base.py”在render_annotated 910. return self.render(context)File“/ usr / local / lib /python3.6/dist-packages/django/template/library.py“在渲染192中.output = self.func(* resolved_args,** resolved_kwargs)文件”/usr/local/lib/python3.6/dist-packages / render_framework/templatetags/rest_framework.py“在render_field 90中 . 返回renderer.render_field(字段,样式)文件”/usr/local/lib/python3.6/dist-packages/rest_framework/renderers.py“在render_field 354中返回template.render(context)文件“/usr/local/lib/python3.6/dist-packages/django/template/backends/django.py”在渲染61中 . 返回self.template.render(context)文件“/ usr /local/lib/python3.6/dist-packages/django/template/base.py“在渲染175中 . 返回self._render(context)文件”/usr/local/lib/python3.6/dist-packages/django /_mplate/base.py“在_render 167.返回self.nodelist.render(context)文件”/usr/local/lib/python3.6/dist-packages/django/t emplate / base.py“in render 943. bit = node.render_annotated(context)File”/usr/local/lib/python3.6/dist-packages/django/template/base.py“in render_annotated 910. return self . 渲染(渲染)中的文件“/usr/local/lib/python3.6/dist-packages/django/template/defaulttags.py”.values = self.sequence.resolve(context,True)文件“/ usr /解析676中的local / lib / python3.6 / dist-packages / django / template / base.py“ . obj = self.var.resolve(context)File”/usr/local/lib/python3.6/dist-packages /django/template/base.py“解决了_resolve_lookup 864中的802. value = self._resolve_lookup(context)文件”/usr/local/lib/python3.6/dist-packages/django/template/base.py“ . current = current()文件“/usr/local/lib/python3.6/dist-packages/rest_framework/relations.py”在iter_options 534. self.get_choices(cutoff = self.html_cutoff),文件“/ usr / local / get_choices 522中的lib / python3.6 / dist-packages / rest_framework / relations.py“返回self.child_relation.get_choices(cutoff)文件”/usr/local/lib/python3.6/dist -packages / rest_framework / relations.py“在get_choices 194.对于queryset文件中的项目”/usr/local/lib/python3.6/dist-packages/django/db/models/query.py“in iter 272. self . _fetch_all()_fetch_all 1179中的文件“/usr/local/lib/python3.6/dist-packages/django/db/models/query.py”.self._result_cache = list(self._iterable_class(self))File“/ usr / local / lib / python3.6 / dist-packages / django / db / models / query.py“in iter 53. results = compiler.execute_sql(chunked_fetch = self.chunked_fetch,chunk_size = self.chunk_size)File”/ usr /local/lib/python3.6/dist-packages/django/db/models/sql/compiler.py“in execute_sql 1053. sql,params = self.as_sql()File”/usr/local/lib/python3.6 /dist-packages/django/db/models/sql/compiler.py“在as_sql 446. extra_select,order_by,group_by = self.pre_sql_setup()文件”/usr/local/lib/python3.6/dist-packages/django /db/models/sql/compiler.py“在pre_sql_setup 50. self.setup_query()文件”/usr/local/lib/python3.6/dist-packages/django/db/models/sql/compiler.py“中setup_query 40 . self.query.get_initial_alias()文件“/usr/local/lib/python3.6/dist-packages/django/db/models/sql/query.py”在get_initial_alias 886中.alias = self.join(BaseTable(self . get_meta() . db_table,None))get_meta中的文件“/usr/local/lib/python3.6/dist-packages/django/db/models/sql/query.py”284. return self.model._meta Exception Type :/ api / alarms / events / Exception值中的AttributeError:'NoneType'对象没有属性'_meta'

当我在浏览器中访问我的AlarmEvent endpoints 时会发生这种情况......我正在使用generics.ListAPIView来渲染它,但是Django没有渲染它 . 这很有意思,因为当我使用Postman时,我收到回复......

特定对象不会发生错误 .


localhost:8000 / api / alarms / events / - >不呈现,但我得到响应和200状态localhost:8000 / api / alarms / events / 2 - >对于特定对象,它呈现并获得响应