Форум сайта python.su
0
Помогите разобраться с тем как работает choices
Есть модель в которой есть такой столбец
TelBook = models.CharField(max_length=3, choices=YESNOCHOICE)
YESNOCHOICE = (
('Yes', 'Да'),
('No', 'Нет'),
)
{% for DV in DeviceList %}
...
<tr><td>Телефонная книга</td><td>{{ DV.TelBook}}</td></tr>
...
{% endfor %}Отредактировано (Янв. 15, 2012 07:02:45)
Офлайн
0
Обошёл проблему через использование через ForeignKey, не знаю насколько это правильно, но по крайней мере работает
class YesNoChoice(models.Model):
YNC = models.CharField(max_length=3)
def __unicode__(self):
return self.YNC
TelBook = models.ForeignKey(YesNoChoice, related_name='TelBook_choice')
Офлайн
2
В шаблоне
{% for DV in DeviceList %}
...
<tr><td>Телефонная книга</td><td>{{ DV.get_TelBook_display }}</td></tr>
...
{% endfor %}Офлайн
568
IRONВторой элемент кортежа заменяется на первый если из модели сделать форму с полем Select.
Помогите разобраться с тем как работает choices
Есть модель в которой есть такой столбецкод переменной для choicesTelBook = models.CharField(max_length=3, choices=YESNOCHOICE)и шаблон html страницы куда выводятся переменные, в том числе и этаYESNOCHOICE = (
('Yes', 'Да'),
('No', 'Нет'),
)На сайте разработчиков функция на английском описана так:{% for DV in DeviceList %}
...
<tr><td>Телефонная книга</td><td>{{ DV.TelBook}}</td></tr>
...
{% endfor %}
(перевод)“Первый элемент в каждом кортеже - фактическое значение, которое будет сохранено. Второй элемент - удобочитаемое название выбора.”
Получается, что в базу данных сохраняется первый элемент кортежа, в моём случае значения ‘Yes’ или ‘No’.
В админке, когда заполняю значения, то в меню выбора значения отображаются по второму элементу кортежа, всё совпадает с описанием действия функции.
А теперь подскажите, django эти значения заменяет только в админке или так же и в шаблон документа, куда будут выводится данные?
У меня значение переменной {{ DV.TelBook}} в шаблоне выводится как Yes или No (т.е. 1й элемент кортежа) а не заменяется на 2 элемент кортежа, что крайне не удобно.
Версия Django: (1, 3, 0, ‘final’, 0)
Ubuntu 11.10 Server
Apache 2.2.20-1ubuntu1.1
Python 2.7.2+ (default, Oct 4 2011, 20:03:08)
Офлайн
0
Спасибо, теперь понятно всё)
Офлайн
0
magnet85{{ DV.get_TelBook_display }} - так же отображает первый элемент кортежа.
В шаблонеИ ещё совет, не нужно называть так переменные, прочтите code style{% for DV in DeviceList %}
...
<tr><td>Телефонная книга</td><td>{{ DV.get_TelBook_display }}</td></tr>
...
{% endfor %}
Офлайн
0
FishHookФорма select не подходит, ибо мне нужно просто выводить значение.
Второй элемент кортежа заменяется на первый если из модели сделать форму с полем Select.
<option value=“yes”>Да</option>
<option value=“no”>Нет</option>
TelBook = models.ForeignKey(YesNoChoice, related_name='TelBook_choice')
Отредактировано (Янв. 23, 2012 08:41:34)
Офлайн
568
IRONКак то так, хотя и похоже на говнокодFishHookФорма select не подходит, ибо мне нужно просто выводить значение.
Второй элемент кортежа заменяется на первый если из модели сделать форму с полем Select.
<option value=“yes”>Да</option>
<option value=“no”>Нет</option>
Пока наиболее правильно работает черезно, при использовании такого подхода, при добавлении второй записи использующей данную модель mysql встаёт позу “зю” с нагрузкой cpu 100%… при этом даже последующее обращение к странице вызывает такое поведение. Помогает только restart сервиса mysqlTelBook = models.ForeignKey(YesNoChoice, related_name='TelBook_choice')
вечером буду дебажить=)
class ChoicesDict(models.Model):
YESNOCHOICE = (
('Yes', 'Да'),
('No', 'Нет'),
)
choice = CharField(u'Выбор', max_length = 3)
class TelBooks(models.Model):
tel_book = models.ForeignKey( ChoicesDict)
def overview(request):
t_b=TelBooks.objects.all()
choices=dict(ChoicesDict.YESNOCHOICE)
result=[choices[i.tel_book] for i in t_b]
return render_to_response("index.html", {'result':result})
{% for i in result %}
......Офлайн
0
в чём принципиальная разница?
Офлайн
568
IRON
в чём принципиальная разница?
IRON
но, при использовании такого подхода, при добавлении второй записи использующей данную модель mysql встаёт позу “зю” с нагрузкой cpu 100%… при этом даже последующее обращение к странице вызывает такое поведение. Помогает только restart сервиса mysql
Офлайн