zoukankan      html  css  js  c++  java
  • AutoField的话就报错:'AutoField' object has no attribute 'rel'

    def data_inspect(self, data, extra=None):
            if isinstance(data, (QuerySet, Page, list)):
                convert_data = []
                if extra:
                    for i, obj in enumerate(data):
                        convert_data.append(self.data_inspect(obj, extra.get(
                            **{self.through_fields[0]: obj, self.through_fields[1]: self.source_field})))
                else:
                    for obj in data:
                        convert_data.append(self.data_inspect(obj))
                return convert_data
            elif isinstance(data, models.Model):
                obj_dict = {}
                concrete_model = data._meta.concrete_model
                for field in concrete_model._meta.local_fields:
                    # 检查 field 是否存在 rel 这个属性,为'AutoField' object has no attribute 'rel'错误填坑
                    if hasattr(field, 'rel'):
                        if field.rel is None:
                            if self.check_attr(field.name) and hasattr(data, field.name):
                                obj_dict[field.name] = self.data_inspect(getattr(data, field.name))
                        else:
                            if self.check_attr(field.name) and self.foreign:
                                obj_dict[field.name] = self.data_inspect(getattr(data, field.name))
                    else:
                        if self.check_attr(field.name) and hasattr(data, field.name):
                            obj_dict[field.name] = self.data_inspect(getattr(data, field.name))
                for field in concrete_model._meta.many_to_many:
                    if self.check_attr(field.name) and self.many:
                        obj_dict[field.name] = self.data_inspect(getattr(data, field.name))
                for k, v in data.__dict__.items():
                    if not str(k).startswith('_') and k not in obj_dict.keys() and self.check_attr(k):
                        obj_dict[k] = self.data_inspect(v)
                if extra:
                    for field in extra._meta.concrete_model._meta.local_fields:
                        if field.name not in obj_dict.keys() and field.name not in self.through_fields:
                            if field.rel is None:
                                if self.check_attr(field.name) and hasattr(extra, field.name):
                                    obj_dict[field.name] = self.data_inspect(getattr(extra, field.name))
                            else:
                                if self.check_attr(field.name) and self.foreign:
                                    obj_dict[field.name] = self.data_inspect(getattr(extra, field.name))
                return obj_dict
            elif isinstance(data, manager.Manager):
                through_list = data.through._meta.concrete_model._meta.local_fields
                through_data = data.through._default_manager
                self.through_fields = [data.target_field.name, data.source_field.name]
                self.source_field = data.instance
                if len(through_list) > 3 and self.through:
                    return self.data_inspect(data.all(), through_data)
                else:
                    return self.data_inspect(data.all())
            elif isinstance(data, (datetime.datetime, datetime.date, datetime.time)):
                return self.time_func(data)
            elif isinstance(data, (ImageFieldFile, FileField)):
                return data.url if data.url else data.path
            elif isinstance(data, Decimal):
                return float(data)
            elif isinstance(data, dict):
                obj_dict = {}
                if self._dict_check:
                    for k, v in data.items():
                        obj_dict[k] = self.data_inspect(v)
                else:
                    for k, v in data.items():
                        if self.check_attr(k):
                            obj_dict[k] = self.data_inspect(v)
                return obj_dict
            elif isinstance(data, (str, bool, float, int)):
                return data
            else:
                return None
  • 相关阅读:
    JAVA语言编程思维入门
    C语言入门编程思维引导
    Spring入门
    Linux设置Swap虚拟内存方法
    WordPress在Centos下Apache设置伪静态方法
    Maven(十五)Maven 聚合
    Maven(十四)Maven 继承
    Maven(十三)Maven统一声明版本号
    Maven(十二)Maven 依赖详解
    Maven(十一)导入手动创建的Maven 工程
  • 原文地址:https://www.cnblogs.com/ameile/p/10078809.html
Copyright © 2011-2022 走看看