Найти - Пользователи
Полная версия: Вывод форм и заполнение поля формы по умолчанию
Начало » Django » Вывод форм и заполнение поля формы по умолчанию
1
Kindly
Здравствуйте!
Недавно начал постигать азы Джанго, делаю страничку для ввода данных показаний счетчиков

есть две модели:
class Data_meter(models.Model):

'''Ввод показаний счетчиков'''

room_number = models.IntegerField('номер квартиры')
type_meter = models.ForeignKey(Meter, verbose_name='Вид счётчика')
accounting_year = models.IntegerField('Год учета', help_text='Введите год учёта', null=True)
accounting_month = models.IntegerField('Месяц учета', help_text='Введите месяц учёта', null=True)
dannie = models.IntegerField('Показание прибора', blank=False)
date = models.DateTimeField('дата', auto_now_add=True)

class Meta:
verbose_name = 'Данные счетчика'
verbose_name_plural = 'Данные счетчиков'

def __str__(self):
return 'Данные счетчика {}'.format(self.id)

и вторая модель:
class Meter(models.Model):

'''Администрирование счетчиков'''

type_meter = models.CharField('Вид счетчика', max_length=45, null=True, blank=True)
code_type_meter = models.CharField('Код счетчика', max_length=10, blank=True)


class Meta:
verbose_name = 'Вид счетчика'
verbose_name_plural = 'Виды счетчиков'

def __str__(self):
return str(self.type_meter) + '_' + str(self.code_type_meter)

шаблон имеет вид:
{% for meter in meters %}
<div class="col-md-3">

<h3>{{ meter.type_meter }}</h3>
<hr>
<form action="" method="post">
{{ form.as_p }}
</form>

А форма имеет такое описание:
class data_meterform(forms.ModelForm):
#type_meter = forms.ModelChoiceField(queryset=Meter.objects.all())
class Meta:
model = Data_meter
fields = ['room_number', 'accounting_month', 'accounting_year', 'type_meter', 'dannie']


ну и представление:
def index(request):
meters = Meter.objects.all()


form = data_meterform(initial={
"type_meter": type_meter ???
})

context = {
'meters': meters,
'form': form
}
return render(request, 'index.html', context)


Собственно проблема в том, что итерируя список счетчиков, я не могу установить по умолчанию выбранным значение формы тип счетчика. То есть у меня форма выводится например для горячей воды, значит и поле формы “вид счетчика” тоже должно быть выбрано горячая вода, ну и еще в добавок скрыто от юзера, но с этим проблем нет.
Как передать значение type_meter из итератора в форму? В представлении в initial не знаю как передать корректное значение для каждой итерации.
helm2004
{%if%} {%else%} Вам в помощь
FishHook
     form = data_meterform(initial={
        "type_meter": Meter.objects.filter(type_meter="hot")
        })
Kindly
FishHook
У меня формы выводятся в цикле, нельзя константой передать значение тип счётчика. фильтр для кверисета должен быть тоже динамическим.
FishHook
Но в примере вы только одну форму показали. Откуда берется коллекция форм?
Kindly
FishHook
Откуда берется коллекция форм?
Форма одна, она содержит поля для ввода данных показаний счетчиков.
Вывожу я эту форму 4 раза по текущему кол-ву счетчиков, используя для этого цикл for.
Таким образом, используя данные по кол-ву счетчиков я вывожу форму ввода данных столько раз сколько это нужно, используя модель Meter. Но форма строится на модели Data_meter (ввод данных счетчиков) и в этой форме нужно по дефолту заполнить тот вид счетчика что выбрал цикл for из модели Meter.
FishHook
 forms = [(form, "hot"), (form, "cold"), (form, "electro"), (form, "gas")]

 {% for form, type in forms%}
<form>
<input type="hidden" value="{{type}}" />
{{ form.as_table }}
</form>
{% endfor %}
Kindly
FishHook
forms =

{% for form, type in forms%}
<form>
<input type=“hidden” value=“{{type}}” />
{{ form.as_table }}
</form>
{% endfor %}


А если появится новый счетчик, надо будет менять forms, я пытаюсь сделать, чтобы как только новый счетчик через админку добавили, код продолжал работать и выдавал уже 5 счетчиков :-)
С ручным ведение счетчиков в коде и проблемы бы не было, давно б так сделал. Понимаю, что для текущей задачи так изголяться не стоит, но я же учусь, поэтому стараюсь делать сразу прально, хотя это меня и притормозило.


UPD: хотя можно же forms вести динамически и тогда сколько бы счетчиков не было он будет всегда актуальным. вечером попробую
Kindly
helm2004
{%if%} {%else%} Вам в помощь
А что условием сделать? что то с чем то сравнивать?
FishHook
А если появится новый счетчик
Да блин! Запрос что ли трудно сделать?

 types = Meter.objects.all().vlues_list("type_meter", flat=True)
forms = [ (form, t) for t in types]
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB