У меня есть класс ModelForm
, в котором я установил пару полей как ChoiceField
. Для одного из моих взглядов, я хотел бы создать форму из моего ModelForm
класса, который вытягивает из экземпляра моей модели в базе данных (например, так):Django ModelForm ChoiceField не отображает данные экземпляра
form = MyModel(instance=model_instance)
Когда я делаю это, и затем сделать форму в шаблоне я заметил, что большинство полей предварительно заполнены значениями, вытащенными из экземпляра модели, и это то, что я хочу. Однако это не относится к двум полям ChoiceField
. Эти рендеринги отображаются в виде выпадающих меню выбора без какой-либо определенной опции.
Что странно, если я не определяю эти два поля как ChoiceField
-type в моем классе ModelForm, они отображают как обычные текстовые поля ввода в HTML и предварительно заполняют их с использованием значений базы данных. Но когда я определяю их так, чтобы они отображались как поля ввода выбора в HTML, ничего не было выбрано заранее. Могу ли я изменить это так, чтобы значения из базы данных были предварительно выбраны?
EDIT: В соответствии с просьбой вот код для моей модели и формы:
class App(models.Model):
CODES = (
(u'a',u'annual'),
(u'm',u'monthly'),
(u'w',u'weekly')
)
code = models.CharField(max_length=1, choices=CODES)
start_time = models.TimeField(blank=True, null=True)
end_time = models.TimeField(blank=True, null=True)
class AppForm(ModelForm):
CODES = (
(u'',u'Please select code'),
(u'a',u'annual'),
(u'm',u'monthly'),
(u'w',u'weekly')
)
TIMES = (
(u'00:00',u'All Day'),
(u'12:00',u'Noon')
)
start_time = forms.ChoiceField(required=False, choices=TIMES)
end_time = forms.ChoiceField(required=False, choices=TIMES)
code = forms.ChoiceField(choices=CODES, label='Type')
class Meta:
model = App
Интересно, что code
поля имеет значение экземпляра модели заранее выбранное просто отлично, когда визуализируются как HTML. Интересно, имеет ли смысл аргумент choices
в определении модели?
UPDATE: Я просто заметил, что если я подтянуть App
экземпляр в python manage.py shell
так:
a = App.objects.get(id=16)
a.start_time
я получаю значение как datetime.time(12, 0)
. Но в администраторе Django, когда я просматриваю все экземпляры App
, все они показывают (None)
под start_time
и end_time
. Почему это так?
возможно дубликат [Как сделать пункт меню Джанго ModelForm выбран по умолчанию?] (Http://stackoverflow.com/questions/624265/how-do-i-make-a-django -modelform-menu-item-selected-by-default) и многие другие. –
Вы могли бы разместить код в своей модели и форме. Благодарю. – Amyth
@Hedde, не желая иметь выбранную по умолчанию опцию. Я хочу, чтобы выбранная опция появилась из экземпляра объекта. Вы заметите, что я действительно опубликовал комментарий ниже принятого ответа на этот другой вопрос именно потому, что он не сработал для меня. – GChorn