问题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中的元素为字符型
二:若是整型,则需要先转换为字符型后再转为str类型。
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
文件。在文件中添加如下语句:
再次进行python manage.py makemigrations <你的app名字>
从图片中可以看出来在users 应用下profile表单的user_email字段存在问题,old_field不在数据库中了。找到了这个迁移:
把这个迁移删除,然后运行makemigrations 成功,
如果还报上面的错误说明还有字段出现这样的错误,按照上面的方法一个个解决掉就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路径'))
然后在需要调用的地方 引用
问题6:DateTimeField received a naive datetime … while time zone support is active.
解决办法:
将项目的setting.py 中USE_TZ = True改成 False
问题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中表的字段,只需将引用代码注释即可。
问题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'
},
}