問題1:Running migrations: No migrations to apply.(django不能創(chuàng)建數(shù)據(jù)庫中的表的問題)
解決:
第一步:
刪除該app名字下的migrations下的init.py等文件每辟。
第二步:
進(jìn)入數(shù)據(jù)庫岖圈,找到django_migrations的表富腊,刪除該app名字的所有記錄。
第三步:執(zhí)行下面這兩條命令:(在項目目錄下)
python manage.py makemigrations
python manage.py migrate
原因:
django_migrations表記錄著數(shù)據(jù)庫的對應(yīng)表的修改記錄。
每次修改后,都執(zhí)行第三步的命令,然后在第一步的文件夾下生成修改的文件,django_migrations表記錄修改的變更過程鸠补。
問題2: list和str互轉(zhuǎn)
解決:
1.list->str
一:需要注意的是該方法需要list中的元素為字符型
二:若是整型,則需要先轉(zhuǎn)換為字符型后再轉(zhuǎn)為str類型嘀掸。
2.str->list
2紫岩、str轉(zhuǎn)list
假設(shè)有一個名為test_str的str,轉(zhuǎn)換后的list名為test_list
則轉(zhuǎn)換方法:
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 時出現(xiàn) :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'
鼠標(biāo)打開E:\new_tdms\tdms\tdms_env\lib\site-packages\django\db\migrations\operations\fields.py
文件睬塌。在文件中添加如下語句:
再次進(jìn)行python manage.py makemigrations <你的app名字>
從圖片中可以看出來在users 應(yīng)用下profile表單的user_email字段存在問題泉蝌,old_field不在數(shù)據(jù)庫中了歇万。找到了這個遷移:
把這個遷移刪除,然后運行makemigrations 成功梨与,
如果還報上面的錯誤說明還有字段出現(xiàn)這樣的錯誤堕花,按照上面的方法一個個解決掉就OK了,祝大家工作愉快粥鞋。
問題5:django中不同App之間調(diào)用model缘挽,出現(xiàn)問題ValueError: attempted relative import beyond top-level package
解決辦法:
在項目的setting.py中 添加sys.path.insert(0, os.path.join(BASE_DIR, '你app路徑'))
然后在需要調(diào)用的地方 引用
問題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 來實現(xiàn)呻粹,即使是不同的MODEL中查詢出來的數(shù)據(jù)壕曼,都可以合并到一個 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方法實現(xiàn)圖片上傳:
<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 保存的時間與當(dāng)前時間不一致
解決:
- 在Django的配置文件settings.py中轧飞,有兩個配置參數(shù)是跟時間與時區(qū)有關(guān)的,分別是TIME_ZONE和USE_TZ
- 如果USE_TZ設(shè)置為True時撒踪,Django會使用系統(tǒng)默認(rèn)設(shè)置的時區(qū)过咬,即America/Chicago,此時的TIME_ZONE不管有沒有設(shè)置都不起作用制妄。
- 如果USE_TZ 設(shè)置為False掸绞,而TIME_ZONE設(shè)置為None,則Django還是會使用默認(rèn)的America/Chicago時間耕捞。若TIME_ZONE設(shè)置為其它時區(qū)的話衔掸,則還要分情況,如果是Windows系統(tǒng)俺抽,則TIME_ZONE設(shè)置是沒用的敞映,Django會使用本機(jī)的時間。如果為其他系統(tǒng)磷斧,則使用該時區(qū)的時間驱显,入設(shè)置USE_TZ = False, TIME_ZONE = 'Asia/Shanghai', 則使用上海的UTC時間。
問題12:django.core.exceptions.FieldError: Related Field got invalid lookup: icontains
解決:
- 這是在兩個實體table中瞳抓,外鍵引用以后,views中添加search框出現(xiàn)的問題伏恐,來看看情況 :
models.py:
class Product(models.Model):
name = models.CharField('product name', max_length=30)
Order(models.Model):
product = models.ForeignKey("Product") #外鍵引用產(chǎn)品類
views.py:
class OrderViewSet(viewsets.ModelViewSet):
search_fields = ('product',) #問題就是出在這里
調(diào)用接口進(jìn)行search就會出現(xiàn)上面問題
解決辦法:
- 修改views.py 如下:
class OrderViewSet(viewsets.ModelViewSet):
search_fields = ('product__name',) #問題就是出在這里
作為外鍵django默認(rèn)是把id和order類關(guān)聯(lián)孩哑,這里不能直接寫product , 而是product的一個具體字段翠桦,product是個對象横蜒,沒法直接查詢胳蛮。
注! 這里是兩個下劃線 product__name
問題13:django.db.utils.DatabaseError: ORA-01430: column being added already exists in table
解決:
問題提示migrate 文件引用了其他app的migrate文件丛晌,而數(shù)據(jù)庫已經(jīng)存在其他app的migrate中表的字段仅炊,只需將引用代碼注釋即可。
問題13:non-default argument follows default argument
解決:
錯誤原因是將沒有默認(rèn)值的參數(shù)在定義時放在了有默認(rèn)值的參數(shù)的后面
問題14:urllib3.exceptions.MaxRetryError: HTTPConnectionPool Max retries exceeded with url:Failed to establi
解決:
錯誤原因http連接太多沒有關(guān)閉導(dǎo)致的
問題15:pandas.read_csv() 報錯 OSError: Initializing from file failed
解決:
這個參數(shù)中有中文澎蛛,但是Python3不是已經(jīng)支持中文了嗎抚垄?參考了錯誤原因和pandas的源碼,發(fā)現(xiàn)調(diào)用pandas的read_csv()方法時谋逻,默認(rèn)使用C engine作為parser engine呆馁,而當(dāng)文件名中含有中文的時候,用C engine在部分情況下就會出錯毁兆。所以在調(diào)用read_csv()方法時指定engine為Python就可以解決問題了浙滤。
da4=pd.read_csv('F:\\數(shù)據(jù)源\\工程清單.csv',engine='python')
另外一種解決方法,就是使員工open函數(shù)打開文件气堕,再取訪問里面的數(shù)據(jù):
da3=pd.read_csv(open('F:\\4.0 居配工程監(jiān)測\\2.0 數(shù)據(jù)源\\02.南京新居配工程清單.csv'))
問題15:類型錯誤纺腊。期望為主鍵,獲得的類型為 Model,
解決:
將傳入的模型數(shù)據(jù)改為模型主鍵project => project.bt_project_number
問題16:ORA-00001: unique constraint () violated 主鍵
解決:
序列化時出現(xiàn)不存在的字段茎芭,導(dǎo)致序列化時出現(xiàn)問題揖膜。
問題17:http請求時,請求數(shù)組參數(shù)顯示為filterData[]: 1骗爆,應(yīng)該顯示為filterData: [1]
解決:
將請求參數(shù)使用JSON.stringify(vm.checkList) 次氨,將對象轉(zhuǎn)換為數(shù)據(jù)。
問題18:http接口GET請求時摘投,請求傳入數(shù)組煮寡,后臺接收變?yōu)樽址?/h4>
解決:
這是GET請求的機(jī)制,將數(shù)組轉(zhuǎn)化為字符串拼在URL后面犀呼。解決方法:
1:在后臺將字符串轉(zhuǎn)化為數(shù)組(麻煩)
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的字段幸撕,在序列化時沒有進(jìn)行 many=True
問題20:django_crontab ModuleNotFoundError: No module named 'fcntl'
解決:
django_crontab不支持在windows使用,需要linux上開發(fā)的外臂。
問題21:TypeError: unsupported operand type(s) for +: 'int' and 'str'
解決:
python 語法將int類型轉(zhuǎn)換成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='關(guān)聯(lián)推薦商品',
null=True, blank=True, symmetrical=False)
add_time = models.DateTimeField(default=datetime.now, verbose_name='添加時間')
商品類related_produce字段設(shè)計成ManyToManyField,并指向自己宋光。
symmetrical=False為當(dāng)多對多關(guān)系對應(yīng)自己時貌矿,建立關(guān)系時不需要迭代插入。
例:
symmetrical=True:商品1關(guān)聯(lián)了商品2罪佳,則商品2也關(guān)聯(lián)了商品1
symmetrical=False:商品1關(guān)聯(lián)了商品2逛漫,商品2不關(guān)聯(lián)商品1
這里由于為關(guān)聯(lián)推薦商品,故設(shè)置其為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!
解決:定時器日志不要出現(xiàn)重復(fù)的
問題24:數(shù)據(jù)庫連接方式
1:使用SID方式
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': '', # 數(shù)據(jù)庫名稱
'USER': '', # 用戶名
'PASSWORD': '', # 密碼
'HOST': '', # HOST
'PORT': '', # 端口
'charset': 'utf8'
},
}
2:使用service name方式
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': 'HOST:PORT/NAME', # 數(shù)據(jù)庫名稱 如果連接方式為service name 注意:HOST和PORT鍵需要從字典中刪除-否則Django會嘗試使用完整的“ NAME”作為SID進(jìn)行連接酌毡。
'USER': '', # 用戶名
'PASSWORD': '', # 密碼
'charset': 'utf8'
},
}