python - 有条件的 Django 模型创建

标签 python django python-3.x django-models

我正在为 django 编写一个应用程序,我打算发布它。此应用需要一个 bool 值设置变量CONSUMER_REGISTRATION

获取这个变量的目的是决定是否定义ConsumerRegistrationModel

我就是这样做的。

from django.db import models
from django.conf import settings

if getattr(settings, 'CONSUMER_REGISTRATION', False):
    class ConsumerRegistration(models.Model):
        ...

它工作正常。我面临的唯一问题是开发人员每次更改设置中的变量时都需要运行 makemigrations 和迁移命令。

1- 这项工作可以自动化吗?。因此,如果他们更改变量,则 django 中的一些代码会自动运行 makemigrations 和 migrate 命令。

2- 还是将这项工作留给开发人员就完全没问题了??

3- 另外我想问一下在 django 中这样做是不是一个好方法?

最佳答案

接受的答案并没有真正提供一种方法来完成 OP 所要求的,即有条件地声明模型。

人们可能出于各种原因想要这样做,从根本不声明模型到根据设置以不同方式声明模型(暗示如果您这样做:您打算在不同的地方使用不同的设置)。

一种解决方案是将模型放在自己的应用程序中,并根据设置有条件地包含该应用程序:

# Set this your per-project settings:
CONSUMER_REGISTRATION = True

# Set this in the generic settings
INSTALLED_APPS = [...]

if CONSUMER_REGISTRATION:
    INSTALLED_APPS.append('consumer_registration') # Models will be loaded.

创建一个只包含一个模型的应用程序没有错。

关于“自动化”它,如果在设置为真时运行迁移,将创建表。改成false不会删除表。

关于python - 有条件的 Django 模型创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48476900/

相关文章:

python - Django 中的评论

python - Django rest 框架 api_view 与普通 View

javascript - 如何在 Django 模板中迭代字典?

python - 如何从实验室图像中删除 L channel

python - Pytorch 挤压和解压

python - 导入错误: No module named numpy on Ubuntu after Numpy Installation

django - 如何在django Rest swagger中添加图像上传字段

python - brew install python3 没有安装 pip3

python-3.x - 从 python 脚本登录到 rsyslog 工具

cpython - 完成后如何以编程方式告诉 CPython 解释器进入交互模式?