跳转到主要内容

一个允许从外部修改任何django应用程序模型的包,而无需修改应用程序本身的代码。

项目描述

gitHub Actions Status

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 (5.8 kB 查看哈希值)

上传时间

支持单位: