如何通过Django模型字段定义保持DRY原则

2024-05-19 23:25:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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

场景1:

file_one = models.FilePathField(path=FIELD_PATH, allow_files=True, allow_folders=True, recursive=True)
file_two = models.FilePathField()
file_three = models.FilePathField()

我可以这样做吗:

^{pr2}$

场景2:

base = models.FilePathField(allow_files=True, allow_folders=True, recursive=True)
file_one = models.FilePathField(path=FIELD_PATH1)
file_two = models.FilePathField(path=FIELD_PATH2)
file_three = models.FilePathField(path=FIELD_PATH3)

如何让文件1、2和3继承/扩展base = models...中的规则,同时又能为每个文件分配不同的path=...

我觉得Django: Dynamic model field definition很接近,但不是我要找的!在

让堆栈溢出!在


Tags: pathdjangotruefieldmodels场景filesone
2条回答

我同意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
)

老实说,DRY代码很重要,应该努力实现,但也有一些限制:)在这种情况下,您在DRY和python的zen第二行之间存在分歧Explicit is better than implicit。如果我在维护你的代码,我更愿意进来看看:

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)

因为当我没有“干”的时候,很快就会知道发生了什么,我也不必浪费时间去说“等等,什么?”在

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

^{pr2}$

。。但那是因为我对PEP8很执着!):)

相关问题 更多 >