一个允许从外部修改任何django应用程序模型的包,而无需修改应用程序本身的代码。
项目描述
django-fieldbustier
此django应用程序的目的是允许您从您的django项目外部添加、删除或修改第三方应用程序中的模型字段。
为什么取这个名字?
因为想要添加来自另一个django应用程序的模型,就像想要上船并通过大喊“全体上船”,嘴里咬着一把刀。
在法语中,“flibustier”也是一个海盗,这个词与fieldbustier非常接近,所以 -> django-fieldbustier。
如何使用django-fieldbustier
首先,将 "django_fieldbustier" 添加到您的已安装应用中,位于您打算修改的任何应用之上。
然后,您必须在设置中声明您想要添加、修改或删除的字段。
有三个配置变量:
- ADD_FIELD_DJANGO_FIELDBUSTIER 用于添加字段
- REPLACE_FIELD_DJANGO_FIELDBUSTIER 用于修改字段
- DELETE_FIELD_DJANGO_FIELDBUSTIER 用于删除字段
要添加或修改字段,必须使用 FieldBustierConfig
。要删除字段,必须使用 DeleteFieldBustierConfig
。
FieldBustierConfig
是具有以下属性的 namedtuple
- app_name
- model_klass
- field_name
- field_klass (您可以使用Django Field或您自己的Field)
- args (位置参数的元组)
- kwargs (关键字参数的字典)
DeleteFieldBustierConfig
是具有以下属性的 namedtuple
- app_name
- model_klass
- field_name
添加字段
from django_fieldbustier.fieldbustier_config import FieldBustierConfig
ADD_FIELD_DJANGO_FIELDBUSTIER = [
FieldBustierConfig(
"demo_app",
"DummyModel",
"new_char_field",
"CharField",
("An another CharField",),
{"blank": True, "max_length": 200},
)
]
修改字段
from django_fieldbustier.fieldbustier_config import FieldBustierConfig
REPLACE_FIELD_DJANGO_FIELDBUSTIER = [
FieldBustierConfig(
app_name="demo_app",
model_klass="DummyModel",
field_name="char_field",
field_klass="CharField",
args=("CharField FieldBusted !",),
kwargs={"blank": True, "max_length": 200},
),
FieldBustierConfig(
"demo_app",
"DummyModel",
"decimal_field",
"DecimalField",
("Decimal Field FieldBustier",),
{"default": 2.3, "max_digits": 14, "decimal_places": 3},
),
]
删除字段
from django_fieldbustier.fieldbustier_config import FieldBustierConfig
DELETE_FIELD_DJANGO_FIELDBUSTIER = [DeleteFieldBustierConfig("demo_app",
"DummyModel",
"int_field")]
迁移
GENERATE_FIELDBUSTIER_MIGRATIONS选项
如果您已使用SQL直接实施更改,则可能不想生成迁移。
要完成此操作,您只需在设置中将(在您的设置中)GENERATE_FIELDBUSTIER_MIGRATIONS设置为False。
迁移文件的位置
默认情况下,应用程序的迁移文件位于应用程序中。在我们的例子中,如果您使用Django-Fieldbustier,我们希望避免修改目标应用程序。因此,默认行为完全不合适。
为了避免这种情况,请简单地使用django的MIGRATION_MODULES变量来选择您想要生成迁移的位置。理想情况下,应该在项目开始时这样做,以避免问题。
例如,如果编辑内置的django应用程序auth
中的模型,我们可能希望将迁移保存到我们本地的users
应用程序中。在这种情况下,我们可以在设置中添加以下内容
MIGRATION_MODULES = {'auth': 'users.migrations_auth'}
这需要将原始的auth
迁移复制到users
应用程序中的migrations_auth
文件夹。现在,您的项目将在users
应用程序中的migrations_auth
文件夹中查找(并添加)针对auth
应用程序的迁移文件。
感谢
感谢Olivier Meunier,Creme CRM代码库和Mezzanine注入字段系统为我们提供原始想法。
项目详情
django-fieldbustier-1.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | eaec5f5db21d69b3254a9dcf69cfa1aaceab8d7d01b9d51e1f73a37f9622796b |
|
MD5 | fa2883ec06349d30988f6f42c33f6fee |
|
BLAKE2b-256 | fc114df594365f9e35e17308447e4ed0a7fff0d9a182d087c0a93974e7bf054b |