我很难过。我有一个自定义模型字段类,它查找两个参数: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抱怨&#39; app_name&#39;不是在kwargs。
但是,请注意字段 init 方法中对print()的调用。这成功打印了app_name。 KeyError之后出现。 init 函数被调用两次还是什么?因此在'app_name'之后抛出错误 从kwargs中脱颖而出?我该如何解决这个问题?如果我在pop()方法中为app_name提供了默认值,那么这是有效的,但是如果kwargs中没有app_name(或file_dir),我希望它出错。
答案 0 :(得分:3)
超类models.FilePathField在这里再次调用init方法:
super(MultiFileUploadAndViewer, self).__init__(*args, **kwargs)
您正在删除kwargs app_name
self.app_name = kwargs.pop('app_name')