我正在为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这样做是不是很好?
答案 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,它将不会删除该表。