有条件的Django模型创建

时间:2018-01-27 14:43:10

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

我正在为django编写一个我打算发布的应用。此应用需要Bolean设置变量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 auto中的一些代码会运行makemigrations和migrate命令。

2-或者将这项工作留给开发人员完全没问题吗?

3-此外,我想问一下,在django这样做是不是很好?

2 个答案:

答案 0 :(得分:2)

您可以简单地定义没有任何条件的模型并调整您的应用程序逻辑,以便ConsumerRegistration模型的实例仅在'CONSUMER_REGISTRATION'标志设置为True标志时与之交互(即创建,更新等) 'CONSUMER_REGISTRATION'

每次更改ConsumerRegistration的值时都会运行迁移会比将ConsumerRegistration表空为空更加混乱。

如@ dahrens所示,您可以将Dim Word, DOC, FSO, Dir Set Word = CreateObject("Word.Application") Set FSO = CreateObject("Scripting.FileSystemObject") Set Dir = FSO.GetFolder(".") Dim FileName FileName = Dir.Path & "\test.doc" Set DOC = Word.Documents.Open(FileName) DOC.SaveCopyAs FileName & "x" DOC.Close Word.Quit 模型与相关逻辑隔离在一个单独的应用程序中,该应用程序只会根据开发人员的需要进行安装。

答案 1 :(得分:1)

接受的答案实际上并没有提供执行OP要求的方法的方法,即有条件地声明模型。

人们可能有多种原因想要这样做,从根本不声明模型,到根据设置不同地声明模型(这意味着如果要这样做:您打算在Windows中运行相同的代码库)。使用不同的设置在不同的地方)。

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

# 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.

创建仅包含模型的应用没有错。

关于“自动”,如果在设置为true时运行迁移,则将创建表。如果将其更改为false,它将不会删除该表。