我难住了。我有一个自定义模型字段类,它查找两个参数:app_name 和 file_dir。
在我的模型定义中,我有这个:
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 中。
但是,请注意字段init方法中对 print() 的调用。这成功打印了 app_name。KeyError 紧随其后。init函数是否被调用了两次?因此在 'app_name 从 kwargs 中弹出后抛出错误?我该如何解决这个问题?如果我在 pop() 方法中为 app_name 提供默认值,这可行,但我希望它在 kwargs 中不存在 app_name(或 file_dir)时出错。