кажется, что работает следующее решение: извлеките сценарий точки входа в файл сценария .sh.
Когда вы запустите свой контейнер, переменные окружения получат значения по умолчанию, если они не настроены в файле .env.
новый скрипт может использовать параметры напрямую, а значения существуют.
Я не уверен, почему это поведение, но это, вероятно, что-то в порядке загрузки каждого раздела docker-compose.
Не проверял это, но на основе чтения кода Джанго здесь и здесь Я считаю, что это должно работать:
class ThingForm(models.ModelForm):
class Meta:
model = Thing
def __init__(self, *args, **kwargs):
super(ThingForm, self).__init__(*args, **kwargs)
self.fields['verb'].empty_label = None
РЕДАКТИРОВАТЬ : это задокументировано , хотя вы не обязательно будете искать ModelChoiceField, если работаете с автоматически сгенерированной ModelForm.
РЕДАКТИРОВАТЬ : как jlpp отмечает в своем ответе, это не завершено - вы должны переназначить выбор для виджетов после изменения атрибута empty_label. Поскольку это немного странно, другой вариант, который легче понять, это просто переопределить весь ModelChoiceField:
class ThingForm(models.ModelForm):
verb = ModelChoiceField(Verb.objects.all(), empty_label=None)
class Meta:
model = Thing
из документов
Пустой выбор не будет включен если поле модели имеет пустое значение = False и явное значение по умолчанию (по умолчанию значение будет изначально выбрано вместо этого).
, так что установите значение по умолчанию, и все в порядке
С ответом Карла в качестве руководства и после того, как я в течение нескольких часов копался в источнике Джанго, я думаю, что это полное решение:
Чтобы удалить пустую опцию (расширяя пример Карла):
class ThingForm (models.ModelForm):
Класс Meta:
модель = вещь
def __init __ (self, * args, ** kwargs):
супер (ThingForm, self) .__ init __ (* args, ** kwargs)
self.fields ['verb']. empty_label = Нет
# следующая строка необходима для обновления копии виджета списка выбора
self.fields ['verb']. widget.choices =
self.fields [ 'глагол']. выбор
Чтобы настроить пустую метку опции, по сути, то же самое:
class ThingForm (models.ModelForm):
Класс Meta:
модель = вещь
def __init __ (self, * args, ** kwargs):
супер (ThingForm, self) .__ init __ (* args, ** kwargs)
self.fields ['verb']. empty_label = "Выбрать глагол"
# следующая строка необходима для обновления копии виджета списка выбора
self.fields ['verb']. widget.choices =
self.fields [ 'глагол']. выбор
Я думаю, что этот подход применим ко всем сценариям, где ModelChoiceFields отображаются как HTML, но я не уверен. Я обнаружил, что когда эти поля инициализируются, их выбор передается виджету выбора (см. Django.forms.fields.ChoiceField._set_choices). Установка empty_label после инициализации не обновляет список вариантов выбора виджета. Я недостаточно знаком с Джанго, чтобы понять, следует ли это считать ошибкой.
См. здесь для полного обсуждения и методов решения этой проблемы.