python那点技术程序员

django问题集锦

2018-10-23  本文已影响223人  不爱去冒险的少年y

问题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 保存的时间与当前时间不一致

解决:

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

解决:

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就会出现上面问题
解决办法:

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)

上一篇下一篇

猜你喜欢

热点阅读