django问题集锦

问题1:Running migrations: No migrations to apply.(django不能创建数据库中的表的问题)

解决:

第一步:
删除该app名字下的migrations下的init.py等文件。
第二步:
进入数据库,找到django_migrations的表,删除该app名字的所有记录。
第三步:执行下面这两条命令:(在项目目录下)

python manage.py makemigrations

python manage.py migrate

原因:
django_migrations表记录着数据库的对应表的修改记录。

每次修改后,都执行第三步的命令,然后在第一步的文件夹下生成修改的文件,django_migrations表记录修改的变更过程。

问题2: list和str互转

解决:

1.list->str

一:需要注意的是该方法需要list中的元素为字符型


image.png

二:若是整型,则需要先转换为字符型后再转为str类型。


image.png
2.str->list

2、str转list
假设有一个名为test_str的str,转换后的list名为test_list
则转换方法:
test_list=list(test_str)
例子:

问题3:Django 批量删除

解决:

array = self.request.data.get('ids', None)
        if array:
            """批量删除"""
            try:
                arrayStr = ','.join([str(x) for x in array])
                models.Profile.objects.extra(where=['id IN (' + arrayStr + ')']).delete()
            except:
                return ReturnData(message="ID不存在", statusCode=status.HTTP_400_BAD_REQUEST)
            return ReturnData( statusCode=status.HTTP_204_NO_CONTENT)

问题4:在Makemigrations 时出现 :AttributeError:'NoneType'对象没有属性'is_relation' - None未定义

解决:

.....
  File "E:\new_tdms\tdms\tdms_env\lib\site-packages\django\db\migrations\graph.py", line 376, in make_state
    project_state = self.nodes[node].mutate_state(project_state, preserve=False)
  File "E:\new_tdms\tdms\tdms_env\lib\site-packages\django\db\migrations\migration.py", line 85, in mutate_state
    operation.state_forwards(self.app_label, new_state)
  File "E:\new_tdms\tdms\tdms_env\lib\site-packages\django\db\migrations\operations\fields.py", line 148, in state_forwards
    delay = not old_field.is_relation
AttributeError: 'NoneType' object has no attribute 'is_relation'

鼠标打开E:\new_tdms\tdms\tdms_env\lib\site-packages\django\db\migrations\operations\fields.py文件。在文件中添加如下语句:

image.png

再次进行python manage.py makemigrations <你的app名字>
image.png

从图片中可以看出来在users 应用下profile表单的user_email字段存在问题,old_field不在数据库中了。找到了这个迁移:


image.png

把这个迁移删除,然后运行makemigrations 成功,


image.png

如果还报上面的错误说明还有字段出现这样的错误,按照上面的方法一个个解决掉就OK了,祝大家工作愉快。

问题5:django中不同App之间调用model,出现问题ValueError: attempted relative import beyond top-level package

解决办法:

在项目的setting.py中 添加sys.path.insert(0, os.path.join(BASE_DIR, '你app路径'))
image.png

然后在需要调用的地方 引用


image.png

问题6:DateTimeField received a naive datetime … while time zone support is active.

解决办法:

将项目的setting.py 中USE_TZ = True改成 False
image.png

问题7:序列化需要序列化**.objects.filter()

解决办法:

serializer.MenuSerializer(menuAll, many=True)   #加上many=True序列化列表

问题8:合并querySet

1.合并同一个model的多个QuerySet 的话,是可以采用这种方式的.

QuerySet = QuerySet1 | QuerySet2

返回querySet
2.用chain 来实现,即使是不同的MODEL中查询出来的数据,都可以合并到一个 list 中去.

QuerySet = chain(QuerySet1, QuerySet2)

返回iterator

问题9:The number of GET/POST parameters exceeded settings.DATA_UPLOAD_MAX_NUMBER_FIELDS.

解决:

如果您的settings.py存在DATA_UPLOAD_MAX_NUMBER_FIELDS,则将其值更改为更高的值,或者如果不存在,则将其添加到settings.py:

DATA_UPLOAD_MAX_NUMBER_FIELDS = 10240 # higher than the count of fields

问题10:django 后台ImageField字段类型使用element组件库的el-upload方法实现图片上传:

                <el-upload
                  class="upload-demo"
                  :action= "imgUrl"    //接口路径
                  :headers="headers"   //请求头
                  :on-preview="handlePreview"
                  :on-remove="handleRemove"
                  :before-remove="beforeRemove"
                  accept="image/*"   //文件类型
                  multiple
                  :limit="3"
                  :on-exceed="handleExceed"
                  :file-list="fileList"
                  name='img'>   //字段名称
                  <el-button size="small" type="primary">点击上传</el-button>
                  <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
                </el-upload>


<script type="text/ecmascript-6">
      export default {
        data() {
          return {
              headers:{
                // "Content-Type": "multipart/form-data",
              Authorization: 'JWT '+localStorage.getItem('token')
              },
              imgUrl:'你的接口地址'
          }
      }
  }

问题11:django 保存的时间与当前时间不一致

解决:

  • 在Django的配置文件settings.py中,有两个配置参数是跟时间与时区有关的,分别是TIME_ZONE和USE_TZ
  • 如果USE_TZ设置为True时,Django会使用系统默认设置的时区,即America/Chicago,此时的TIME_ZONE不管有没有设置都不起作用。
  • 如果USE_TZ 设置为False,而TIME_ZONE设置为None,则Django还是会使用默认的America/Chicago时间。若TIME_ZONE设置为其它时区的话,则还要分情况,如果是Windows系统,则TIME_ZONE设置是没用的,Django会使用本机的时间。如果为其他系统,则使用该时区的时间,入设置USE_TZ = False, TIME_ZONE = 'Asia/Shanghai', 则使用上海的UTC时间。

问题12:django.core.exceptions.FieldError: Related Field got invalid lookup: icontains

解决:

  • 这是在两个实体table中,外键引用以后,views中添加search框出现的问题,来看看情况 :
models.py:
class Product(models.Model):
    name = models.CharField('product name', max_length=30)
Order(models.Model):
    product = models.ForeignKey("Product") #外键引用产品类
views.py:
class OrderViewSet(viewsets.ModelViewSet):
    search_fields = ('product',)  #问题就是出在这里

调用接口进行search就会出现上面问题
解决办法:

  • 修改views.py 如下:
class OrderViewSet(viewsets.ModelViewSet):
    search_fields = ('product__name',)  #问题就是出在这里
作为外键django默认是把id和order类关联,这里不能直接写product , 而是product的一个具体字段,product是个对象,没法直接查询。

注! 这里是两个下划线 product__name

问题13:django.db.utils.DatabaseError: ORA-01430: column being added already exists in table

解决:

问题提示migrate 文件引用了其他app的migrate文件,而数据库已经存在其他app的migrate中表的字段,只需将引用代码注释即可。


TIM图片20181106103659.png

问题13:non-default argument follows default argument

解决:

错误原因是将没有默认值的参数在定义时放在了有默认值的参数的后面

问题14:urllib3.exceptions.MaxRetryError: HTTPConnectionPool Max retries exceeded with url:Failed to establi

解决:

错误原因http连接太多没有关闭导致的

问题15:pandas.read_csv() 报错 OSError: Initializing from file failed

解决:

这个参数中有中文,但是Python3不是已经支持中文了吗?参考了错误原因和pandas的源码,发现调用pandas的read_csv()方法时,默认使用C engine作为parser engine,而当文件名中含有中文的时候,用C engine在部分情况下就会出错。所以在调用read_csv()方法时指定engine为Python就可以解决问题了。
da4=pd.read_csv('F:\\数据源\\工程清单.csv',engine='python')
另外一种解决方法,就是使员工open函数打开文件,再取访问里面的数据:
da3=pd.read_csv(open('F:\\4.0 居配工程监测\\2.0 数据源\\02.南京新居配工程清单.csv'))

问题15:类型错误。期望为主键,获得的类型为 Model,

解决:

将传入的模型数据改为模型主键project => project.bt_project_number

问题16:ORA-00001: unique constraint () violated 主键

解决:

序列化时出现不存在的字段,导致序列化时出现问题。

问题17:http请求时,请求数组参数显示为filterData[]: 1,应该显示为filterData: [1]

解决:

将请求参数使用JSON.stringify(vm.checkList) ,将对象转换为数据。

问题18:http接口GET请求时,请求传入数组,后台接收变为字符串

解决:

这是GET请求的机制,将数组转化为字符串拼在URL后面。解决方法:
1:在后台将字符串转化为数组(麻烦)
2:把GET请求修改为POST 请求

问题19:Got AttributeError when attempting to get a value for field **字段** on serializer Serializer.The serializer field might be named incorrectly and not match any attribute or key on the ManyRelatedManager instance.Original exception text was: 'ManyRelatedManager' object has no attribute '字段'.

解决:

存在manytomany的字段,在序列化时没有进行 many=True

问题20:django_crontab ModuleNotFoundError: No module named 'fcntl'

解决:

django_crontab不支持在windows使用,需要linux上开发的。

问题21:TypeError: unsupported operand type(s) for +: 'int' and 'str'

解决:

python 语法将int类型转换成str不能用 a+' ',需使用str(a)

问题22:自己指向自己多对多

1.models.py

class Product(models.Model):
    """
    商品
    """
    name = models.CharField(max_length=30, verbose_name='商品名称')
    product_category = models.ForeignKey(ProductCategory, verbose_name='商品分类', on_delete=models.CASCADE)
    related_product = models.ManyToManyField('self', verbose_name='关联推荐商品',
                                             null=True, blank=True, symmetrical=False)

    add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间')

商品类related_produce字段设计成ManyToManyField,并指向自己。
symmetrical=False为当多对多关系对应自己时,建立关系时不需要迭代插入。
例:
symmetrical=True:商品1关联了商品2,则商品2也关联了商品1
symmetrical=False:商品1关联了商品2,商品2不关联商品1
这里由于为关联推荐商品,故设置其为Flase。

问题23:RuntimeError: No job with hash found. It seems the crontab is out of sync with your settings.CRONJOBS. Run "python manage.py crontab add" again to resolve this issue!

解决:定时器日志不要出现重复的

问题24:数据库连接方式

1:使用SID方式

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.oracle',
            'NAME': '',  # 数据库名称
            'USER': '',  # 用户名
            'PASSWORD': '',  # 密码
            'HOST': '',  # HOST
            'PORT': '',  # 端口
            'charset': 'utf8'
        },
    }

2:使用service name方式

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.oracle',
            'NAME': 'HOST:PORT/NAME',  # 数据库名称 如果连接方式为service name 注意:HOST和PORT键需要从字典中删除-否则Django会尝试使用完整的“ NAME”作为SID进行连接。
            'USER': '',  # 用户名
            'PASSWORD': '',  # 密码
            'charset': 'utf8'
        },
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容