Django rest framework serializer.data抛出AttributeError:';str';对象没有属性'_meta&x27;

Django rest framework serializer.data抛出AttributeError:';str';对象没有属性'_meta&x27;,django-rest-framework,Django Rest Framework,我的序列化程序不会抛出错误,但每当我尝试使用serializer.data时,我都会得到AttributeError:“str”对象没有属性“\u meta”。我做了一组跟踪,确认类型为Contact File "/test/user_profile/views.py", line 97, in retrieve return Response(serializer.data) File "/home/will/virtualenvs/generic_api/lib/python3

我的序列化程序不会抛出错误,但每当我尝试使用serializer.data时,我都会得到AttributeError:“str”对象没有属性“\u meta”。我做了一组跟踪,确认类型为Contact

 File "/test/user_profile/views.py", line 97, in retrieve
    return Response(serializer.data)
  File "/home/will/virtualenvs/generic_api/lib/python3.5/site-packages/rest_framework/serializers.py", line 531, in data
    ret = super(Serializer, self).data
  File "/home/will/virtualenvs/generic_api/lib/python3.5/site-packages/rest_framework/serializers.py", line 262, in data
    self._data = self.to_representation(self.instance)
  File "/home/will/virtualenvs/generic_api/lib/python3.5/site-packages/rest_framework/serializers.py", line 483, in to_representation
    fields = self._readable_fields
  File "/home/will/virtualenvs/generic_api/lib/python3.5/site-packages/django/utils/functional.py", line 35, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/home/will/virtualenvs/generic_api/lib/python3.5/site-packages/rest_framework/serializers.py", line 377, in _readable_fields
    field for field in self.fields.values()
  File "/home/will/virtualenvs/generic_api/lib/python3.5/site-packages/rest_framework/serializers.py", line 363, in fields
    for key, value in self.get_fields().items():
  File "/home/will/virtualenvs/generic_api/lib/python3.5/site-packages/rest_framework/serializers.py", line 983, in get_fields
    info = model_meta.get_field_info(model)
  File "/home/will/virtualenvs/generic_api/lib/python3.5/site-packages/rest_framework/utils/model_meta.py", line 42


----------


, in get_field_info
    reverse_relations = _get_reverse_relationships(opts)
  File "/home/will/virtualenvs/generic_api/lib/python3.5/site-packages/rest_framework/utils/model_meta.py", line 146, in _get_reverse_relationships
    not get_remote_field(relation.field).through._meta.auto_created
AttributeError: 'str' object has no attribute '_meta'
这是我的模型

class Contact(models.Model):
    SUBSCRIPTION_LEVEL = {
        0: 'Both',
        1: 'Monitoring Event',
        2: 'DVR Down'
    }

    id = models.AutoField(primary_key=True, db_column='Id')
    user = models.ForeignKey(User, db_column='UserId')
    title = models.CharField(default='', max_length=20, blank=True, db_column='Title')
    email_one = models.CharField(default='', max_length=75, blank=True, db_column='EmailOne')
    email_two = models.CharField(default='', max_length=75, blank=True, db_column='EmailTwo')
    subscription_level = models.IntegerField(default=0, blank=True, db_column='SubscriptionLevel')
    phone_one = models.CharField(default='', max_length=15, blank=True, db_column='PhoneOne')
    phone_two = models.CharField(default='', max_length=15, blank=True, db_column='PhoneTwo')
    company = models.CharField(default='', max_length=50, blank=True, db_column='Company')
    notes = models.CharField(default='', max_length=500, blank=True, db_column='Notes')
    vehicle_description = models.CharField(default='', max_length=200, blank=True, db_column='VehicleDescription')
    vehicle_plates = models.CharField(default='', max_length=20, blank=True, db_column='VehiclePlates')
    is_active = models.BooleanField(default=True, blank=False, db_column='IsActive')
这里是风景

class ContactViewSet(ModelViewSet):
    permission_classes = (permissions.IsAuthenticated,)
    parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
    serializer_class = ContactSerializer

    def retrieve(self, request, pk=None):
        queryset = Contact.objects.filter(is_active=True)

        if not self.request.user.is_staff:
            queryset = queryset.filter(contacts__user_id=self.request.user.id)

        contact = get_object_or_404(queryset, id=pk)
        serializer = ContactSerializer(contact)
        return Response(serializer.data)
还有我的序列化程序

class ContactSerializer(serializers.ModelSerializer):
    first_name = serializers.CharField(source='user.first_name', required=False)
    last_name = serializers.CharField(source='user.last_name', required=False)

    class Meta:
        model = Contact
        fields = ['id', 'user',  'first_name', 'last_name', 'title', 'email_one', 'email_two', 'company', 'notes', 'subscription_level',
                  'phone_one', 'phone_two', 'vehicle_description', 'vehicle_plates', 'is_active']
我一直在使用序列化程序,甚至删除字段或只是设置字段=“all”,但我一直无法理解为什么会发生这种情况

代码对我来说很好。 不知何故,序列化程序似乎无法获得反转的多对多或外键关系。
你找到有故障的字段了吗?

结果是,事实上,我甚至不知道有很多字段存在。我重写了我们的联系人基础结构,但保留了此型号名称。由于过去开发人员的糟糕设计,我无法运行常规迁移,因为有些模型实际上只是视图。所以我错过了某个模糊模型中的一个参考,该模型甚至没有数据。很高兴你找到了根本原因。