Django makemigrations问题

时间:2017-04-10 13:37:23

标签: python django makemigrations

我很难过。我有一个自定义模型字段类,它查找两个参数: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),我希望它出错。

1 个答案:

答案 0 :(得分:3)

超类models.FilePathField在这里再次调用init方法:

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

您正在删除kwargs app_name

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