dotenv.config()
не будет перезаписывать переменные, если увидит, что они уже существуют в process.env
(что им был назначен путь PM2 MYVAR=foo; node app.js
.
Таким образом, envs процесса, установленные перед запуском, будут иметь приоритет .
Это на самом деле в README dotenv.
Что происходит с переменными среды, которые уже были установлены?
Мы никогда не будем изменять какие-либо переменные среды, которые имеют уже установлен. В частности, если в вашем файле .env есть переменная, которая сталкивается с той, которая уже существует в вашей среде, то эта переменная будет пропущена. Это поведение позволяет переопределить все конфигурации .env с помощью машинно-зависимой окружающей среды, хотя это и не рекомендуется.
https://www.npmjs.com/package/dotenv#what-happens-to-environment-variables-that-were-already-set
blockquote>Если вам нужно как-то изменить это поведение, есть также пакет
dotenv-override
.
Вы можете динамически изменять форму с помощью dict self.fields
. Что-то вроде этого может сработать для вас:
class TicketForm(forms.Form):
Type = Type.GetTicketTypeField()
def __init__(self, ticket, *args, **kwargs):
super(TicketForm, self).__init__(*args, **kwargs)
self.fields['state'] = State.GetTicketStateField(ticket.Type)
Я нашел решение здесь . Если есть лучшее решение, отправьте ответ.
class TicketForm(forms.Form):
Type = Type.GetTicketTypeField()
def __init__(self, ticket=None, *args, **kwargs):
super(TicketForm, self ).__init__(*args, **kwargs)
if ticket:
self.fields['State'] = State.GetTicketStateField(ticket.Type)