#python #django #forms
#python #django #формы
Вопрос:
У меня есть форма, которая записывает урок для пользователей. Я использую lesson.lesson_instrument
и lesson.lesson_datetime_start
для отображения инструмента и даты урока. Я хочу, чтобы моя форма использовала значение lesson.lesson_instrument
and lesson.lesson_datetime_start
в form.booked_instrument
и form.booked_date
, чтобы информация сохранялась в новом отдельном экземпляре модели. Мне было интересно, как получить значение из этого, в форме ввода текста, не вводя его.
HTML
<div class="text-center">
<div class="form-group">
<div class="ins-left">
<p>{{ lesson.lesson_instrument }} {{ form.booked_instrument }}</p>
</div>
<div class="date-right">
<p>{{ lesson.lesson_datetime_start|date}} {{ form.booked_date }}</p>
</div>
</div>
<br />
<br />
<div class="form-group">
<label>Length</label>
{{ form.booked_length }}
</div>
<br />
<div class="form-group">
<label>Time</label>
{{ form.booked_time }}
</div>
<div class="bottom">
<button type="submit" name="submit" class="btn blue_button">Book Now</button>
</div>
</div>
forms.py
class BookedForm(forms.ModelForm):
booked_instrument = forms.CharField(widget=forms.TextInput(attrs={'class' : 'form-control'}))
booked_length = forms.ChoiceField(choices=length_list, widget=forms.Select(attrs={'class' : 'form-control', 'id' : 'length', 'required' : 'True'}))
booked_date = forms.DateField(input_formats=['%Y-%m-%d'], widget=forms.DateInput(attrs={'class': 'form-control'}))
booked_time = forms.ChoiceField(widget=forms.Select(attrs={'class' : 'form-control', 'id' : 'time', 'required' : 'True'}))
class Meta:
model = Booked
fields = ('booked_instrument', 'booked_length', 'booked_date', 'booked_time')
Ответ №1:
Вы бы использовали ModelChoiceField
вместо вашего текущего ChoiceField
. Как следует из названия, ModelChoiceField связывает конкретную модель с ChoiceField, предоставляя вам именно то, что вы ищете.
По сути, как показывают документы Django:
booked_instrument = forms.ModelChoiceField(queryset=Instruments.objects.query(lesson=current_lesson...)
где current_lesson
отображается экземпляр текущего урока, или вы можете фильтровать по другим критериям, или просто отображать все инструменты, которые у вас есть в БД.
Взгляните на документы: ModelChoiceField
Комментарии:
1. У меня нет объекта Instrument, только объект Lesson. Итак, как бы я запросил из этого урока, чтобы получить значение lesson_instrument, поскольку я новичок в концепции ModelChoiceField.
2. Вам нужно будет создать модель под названием Instruments. Это позволит вам хранить такие вещи, как «гитара» или «виолончель», и иметь возможность ссылаться на них во всем вашем приложении. Это должно упростить и повысить производительность, если вы решите это сделать.