Python 如何使用Django模型字段定义保持干燥

Python 如何使用Django模型字段定义保持干燥,python,django,django-models,models,dry,Python,Django,Django Models,Models,Dry,在定义Django模型字段时,遵守DRY原则的最佳实践是什么 情景1: 我可以这样做吗: file_one = models.FilePathField(path=FIELD_PATH, allow_files=True, allow_folders=True, recursive=True) file_two = file_one ... 情景2: 如何让文件1、文件2和文件3继承/扩展base=models…中的规则,同时为每个文件分配不同的path=… 我觉得很接近,但不是我想要的 保持

在定义Django模型字段时,遵守DRY原则的最佳实践是什么

情景1: 我可以这样做吗:

file_one = models.FilePathField(path=FIELD_PATH, allow_files=True, allow_folders=True, recursive=True)
file_two = file_one
...
情景2: 如何让文件1、文件2和文件3继承/扩展
base=models…
中的规则,同时为每个文件分配不同的
path=…

我觉得很接近,但不是我想要的


保持堆栈溢出

老实说,干代码很重要,应该努力争取,但也有局限性:)在这种情况下,您在干代码和python zen的第二行之间存在分歧
显式优于隐式
。如果我在维护您的代码,我更愿意进来看看:

file_one = models.FilePathField(path=FIELD_PATH1, allow_files=True, allow_folders=True, recursive=True)
file_two = models.FilePathField(path=FIELD_PATH2, allow_files=True, allow_folders=True, recursive=True)
file_three = models.FilePathField(path=FIELD_PATH3, allow_files=True, allow_folders=True, recursive=True)
因为在不“干”的情况下,发生的事情马上就显而易见了,我不必浪费时间去“等等,什么?”

(严格地说,我想看到的是:

# Useful comments
file_one = models.FilePathField(
    path=FIELD_PATH1,
    allow_files=True,
    allow_folders=True,
    recursive=True
)

# Useful comments
file_two = models.FilePathField(
    path=FIELD_PATH2,
    allow_files=True,
    allow_folders=True,
    recursive=True
)

…但那是因为我对PEP8有严格的要求!):)

我同意Pete的观点,你绝对不想对简单的模型定义太过棘手。通过在字典中保留默认值并使用**运算符,可以使多个几乎相同的文件字段更易于管理,并且仍然是显式的。比如:

filefield_defaults = {
    'allow_files':True, 
    'allow_folders':True, 
    'recursive':True
}

file_one = models.FilePathField(
    path=FIELD_PATH1,
    **filefield_defaults
)

file_two = models.FilePathField(
    path=FIELD_PATH2,
    **filefield_defaults
)

+1代表建议,U+2713代表我问题的答案:)+1代表哲学,但既然基普回答了我的问题P
# Useful comments
file_one = models.FilePathField(
    path=FIELD_PATH1,
    allow_files=True,
    allow_folders=True,
    recursive=True
)

# Useful comments
file_two = models.FilePathField(
    path=FIELD_PATH2,
    allow_files=True,
    allow_folders=True,
    recursive=True
)
filefield_defaults = {
    'allow_files':True, 
    'allow_folders':True, 
    'recursive':True
}

file_one = models.FilePathField(
    path=FIELD_PATH1,
    **filefield_defaults
)

file_two = models.FilePathField(
    path=FIELD_PATH2,
    **filefield_defaults
)