Найти - Пользователи
Полная версия: choices
Начало » Django » choices
1 2
IRON
Помогите разобраться с тем как работает choices

Есть модель в которой есть такой столбец
TelBook = models.CharField(max_length=3, choices=YESNOCHOICE)
код переменной для choices
	YESNOCHOICE = (
('Yes', 'Да'),
('No', 'Нет'),
)
и шаблон html страницы куда выводятся переменные, в том числе и эта
{% 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)
IRON
Обошёл проблему через использование через 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')
magnet85
В шаблоне
{% for DV in DeviceList %}
...
<tr><td>Телефонная книга</td><td>{{ DV.get_TelBook_display }}</td></tr>
...
{% endfor %}
И ещё совет, не нужно называть так переменные, прочтите code style
FishHook
IRON
Помогите разобраться с тем как работает choices

Есть модель в которой есть такой столбец
TelBook = models.CharField(max_length=3, choices=YESNOCHOICE)
код переменной для choices
	YESNOCHOICE = (
('Yes', 'Да'),
('No', 'Нет'),
)
и шаблон html страницы куда выводятся переменные, в том числе и эта
{% 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)
Второй элемент кортежа заменяется на первый если из модели сделать форму с полем Select.
<option value=“yes”>Да</option>
<option value=“no”>Нет</option>
IRON
Спасибо, теперь понятно всё)
IRON
magnet85
В шаблоне
{% for DV in DeviceList %}
...
<tr><td>Телефонная книга</td><td>{{ DV.get_TelBook_display }}</td></tr>
...
{% endfor %}
И ещё совет, не нужно называть так переменные, прочтите code style
{{ DV.get_TelBook_display }} - так же отображает первый элемент кортежа.
IRON
FishHook
Второй элемент кортежа заменяется на первый если из модели сделать форму с полем Select.
<option value=“yes”>Да</option>
<option value=“no”>Нет</option>
Форма select не подходит, ибо мне нужно просто выводить значение.
Пока наиболее правильно работает через
TelBook = models.ForeignKey(YesNoChoice, related_name='TelBook_choice')
но, при использовании такого подхода, при добавлении второй записи использующей данную модель mysql встаёт позу “зю” с нагрузкой cpu 100%… при этом даже последующее обращение к странице вызывает такое поведение. Помогает только restart сервиса mysql
вечером буду дебажить=)
FishHook
IRON
FishHook
Второй элемент кортежа заменяется на первый если из модели сделать форму с полем Select.
<option value=“yes”>Да</option>
<option value=“no”>Нет</option>
Форма select не подходит, ибо мне нужно просто выводить значение.
Пока наиболее правильно работает через
TelBook = models.ForeignKey(YesNoChoice, related_name='TelBook_choice')
но, при использовании такого подхода, при добавлении второй записи использующей данную модель mysql встаёт позу “зю” с нагрузкой cpu 100%… при этом даже последующее обращение к странице вызывает такое поведение. Помогает только restart сервиса mysql
вечером буду дебажить=)
Как то так, хотя и похоже на говнокод

Модель:
class ChoicesDict(models.Model):
YESNOCHOICE = (
('Yes', 'Да'),
('No', 'Нет'),
)
choice = CharField(u'Выбор', max_length = 3)


class TelBooks(models.Model):
tel_book = models.ForeignKey( ChoicesDict)
View
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})
Template
{% for i in result %}
......
IRON
в чём принципиальная разница?
FishHook
IRON
в чём принципиальная разница?
IRON
но, при использовании такого подхода, при добавлении второй записи использующей данную модель mysql встаёт позу “зю” с нагрузкой cpu 100%… при этом даже последующее обращение к странице вызывает такое поведение. Помогает только restart сервиса mysql
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