Python ';自动字段';对象没有属性';远程#u字段';

Python ';自动字段';对象没有属性';远程#u字段';,python,django,django-rest-framework,Python,Django,Django Rest Framework,Django 1.8中出现了一个奇怪的错误: 'AutoField' object has no attribute 'remote_field' 我有一个这样的模型: from django.db import models from django.utils import timezone class Event(models.Model): product_type = models.CharField(max_length=250, null=False, blank=Fa

Django 1.8中出现了一个奇怪的错误:

'AutoField' object has no attribute 'remote_field'
我有一个这样的模型:

from django.db import models
from django.utils import timezone


class Event(models.Model):
    product_type = models.CharField(max_length=250, null=False, blank=False)
    received_time = models.DateTimeField(editable=False)
    source_json = models.TextField()
    event_id = models.CharField(max_length=250, null=False, blank=False)

    # https://stackoverflow.com/questions/1737017/django-auto-now-and-auto-now-add
    def save(self, *args, **kwargs):
        if not self.id:
            self.received_time = timezone.now()
        return super(Event, self).save(*args, **kwargs)

    @classmethod
    def event_id_is_already_saved(cls, event_id_in_question):
        items_found = cls.objects.filter(event_id=event_id_in_question)
        if items_found:
            return True
        return False
意见如下:

import json

from django.http import HttpResponse
from rest_framework import viewsets

from events.utils.elastic_db_utils import get_elastic_exact_search_from_query_dictionary
from events.serializers import EventSerializer
from events.models import Event


def list_events(request):
    all_events = Event.objects.all()
    serialized = [EventSerializer(event) for event in all_events]
    return HttpResponse(json.dumps(serialized))


class EventViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """
    queryset = Event.objects.all().order_by('-received_time')
    serializer_class = EventSerializer
网址:

无论是我的视图集还是
^events
端点工作,都不会得到相同的错误。您可以在shell中看到我的模型没有任何问题:

In [1]: from events.models import Event

In [2]: Event.objects.all()
Out[2]: [<Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>]
[1]中的
:来自events.models导入事件
在[2]中:Event.objects.all()
输出[2]:[,,,,,,,,,,]

我认为您无法从您提供的代码中推断出确切的原因,但根据错误消息,您可能正在其他地方使用代码,可能是为较新版本的Django编写的第三方库中的代码。如前所述,Django v1.9中的
remote_field
属性被添加到
field
。(这一属性显然是正确的。)

你的选择是:

  • 将项目升级到较新的Django版本
  • 向后移植第三方库,将有问题的
    字段更改为使用
    rel
    ,然后重写任何其他不兼容的代码
  • 将第三方库替换为支持Django v1.8的其他库

  • (我推荐第一种选择,因为在Django版本之间升级是非常困难的。)

    非常好,而且非常丰富。仅仅升级到1.9就足够了,没有任何问题
    In [1]: from events.models import Event
    
    In [2]: Event.objects.all()
    Out[2]: [<Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>]