0
我很難過。我有一個自定義模型字段類,它查找兩個參數:app_name和file_dir。Django makemigrations問題
在我的模型定義我有這樣的:
files = MultiFileUploadAndViewer(app_name = getAppName(), file_dir='RequestedFiles', blank=True)
getAppName()是:
#appconfig imported from apps.py
def getAppName():
return <appConfig>.name
而且自定義字段定義是:
class MultiFileUploadAndViewer(models.FilePathField):
def __init__(self, *args, **kwargs):
print(kwargs['app_name'])
self.app_name = kwargs.pop('app_name')
self.file_dir = kwargs.pop('file_dir','') + '\\'
self.path = MEDIA_ROOT + '\\' + self.app_name + '\\' + self.file_dir
self.upload_url = reverse(self.app_name +':File Upload') + '\\' + self.file_dir
kwargs.update({'path':self.path})
super(MultiFileUploadAndViewer, self).__init__(*args, **kwargs)
我已刪除一切遷移文件夾,除了init .py。
運行makemigrations時,它會拋出一個KeyError,抱怨'app_name'不在kwargs中。
但是,請注意調用print()的方法init方法。這成功地打印了app_name。 KeyError在之後。函數被調用兩次或者其他東西?初始化函數被調用兩次?因此在'app_name 從kwargs彈出後拋出錯誤?我該如何解決這個問題?如果我在pop()方法中爲app_name提供了一個默認值,這可以工作,但如果app_name(或file_dir)不存在於kwargs中,我希望它錯誤。
哇,我有一個根本性的誤解是怎麼回事上。我認爲超級調用會運行超類'__init__? – DrS
是的,這是做的,但沒有app_name和file_dir關鍵字參數,因爲你彈出它們 – lapinkoira
我很困惑爲什麼FilePathField(超類)調用MultiFileUploadAndViewer(我的自定義子類)__init__。如果我不彈出kwargs,FilePathField會抱怨接收到意外的kwargs。 – DrS