Django makemigrations 问题

Django makemigrations Issue

我很难过。我有一个自定义模型字段 class,用于查找两个参数: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 提供默认值,这是有效的,但如果 app_name (或 file_dir)不存在于 kwargs 中,我希望它出错。

init方法又被superclassmodels.FilePathField这里调用了:

super(MultiFileUploadAndViewer, self).__init__(*args, **kwargs)

并且您正在删除这里的 kwargs app_name

self.app_name = kwargs.pop('app_name')