Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Вывод форм и заполнение поля формы по умолчанию [RSS Feed]

#1 Ноя. 7, 2017 21:28:07

Kindly
Зарегистрирован: 2016-06-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод форм и заполнение поля формы по умолчанию

Здравствуйте!
Недавно начал постигать азы Джанго, делаю страничку для ввода данных показаний счетчиков

есть две модели:

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 не знаю как передать корректное значение для каждой итерации.

Отредактировано Kindly (Ноя. 8, 2017 08:49:28)

Офлайн

#2 Ноя. 8, 2017 12:01:32

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

Вывод форм и заполнение поля формы по умолчанию

{%if%} {%else%} Вам в помощь

Офлайн

#3 Ноя. 8, 2017 12:09:44

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вывод форм и заполнение поля формы по умолчанию

     form = data_meterform(initial={
        "type_meter": Meter.objects.filter(type_meter="hot")
        })



Офлайн

#4 Ноя. 8, 2017 12:14:30

Kindly
Зарегистрирован: 2016-06-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод форм и заполнение поля формы по умолчанию

FishHook
У меня формы выводятся в цикле, нельзя константой передать значение тип счётчика. фильтр для кверисета должен быть тоже динамическим.

Офлайн

#5 Ноя. 8, 2017 12:18:35

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вывод форм и заполнение поля формы по умолчанию

Но в примере вы только одну форму показали. Откуда берется коллекция форм?



Офлайн

#6 Ноя. 8, 2017 12:23:16

Kindly
Зарегистрирован: 2016-06-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод форм и заполнение поля формы по умолчанию

FishHook
Откуда берется коллекция форм?
Форма одна, она содержит поля для ввода данных показаний счетчиков.
Вывожу я эту форму 4 раза по текущему кол-ву счетчиков, используя для этого цикл for.
Таким образом, используя данные по кол-ву счетчиков я вывожу форму ввода данных столько раз сколько это нужно, используя модель Meter. Но форма строится на модели Data_meter (ввод данных счетчиков) и в этой форме нужно по дефолту заполнить тот вид счетчика что выбрал цикл for из модели Meter.

Офлайн

#7 Ноя. 8, 2017 14:02:22

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вывод форм и заполнение поля формы по умолчанию

 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 %}



Отредактировано FishHook (Ноя. 8, 2017 14:02:57)

Офлайн

#8 Ноя. 8, 2017 14:29:27

Kindly
Зарегистрирован: 2016-06-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод форм и заполнение поля формы по умолчанию

FishHook
forms =

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


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


UPD: хотя можно же forms вести динамически и тогда сколько бы счетчиков не было он будет всегда актуальным. вечером попробую

Отредактировано Kindly (Ноя. 8, 2017 15:11:23)

Офлайн

#9 Ноя. 8, 2017 17:08:07

Kindly
Зарегистрирован: 2016-06-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод форм и заполнение поля формы по умолчанию

helm2004
{%if%} {%else%} Вам в помощь
А что условием сделать? что то с чем то сравнивать?

Офлайн

#10 Ноя. 8, 2017 18:25:23

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вывод форм и заполнение поля формы по умолчанию

А если появится новый счетчик
Да блин! Запрос что ли трудно сделать?

 types = Meter.objects.all().vlues_list("type_meter", flat=True)
forms = [ (form, t) for t in types]



Офлайн

  • Начало
  • » Django
  • » Вывод форм и заполнение поля формы по умолчанию[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version