Уведомления

Группа в Telegram: @pythonsu

#1 Июль 26, 2011 22:48:21

Yuego
От:
Зарегистрирован: 2011-07-26
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Какой тип поля выбрать в модели?

Имеется некоторая модель, и форма (ModelForm) которая эту модель отображает.

В модель мне нужно добавить поле, для которого возможен выбор любой комбинации из 3-х вариантов (на форме 3 чекбокса соответственно).

По началу сделал IntegerField длиной в 3 разряда. И соответственно первый вариант - 1, второй - 10, третий - 100. При обработке это все складывалось и результат писался в БД. Но что-то как-то этот вариант мне не нравится.

Подскажите, что почитать, где подсмотреть что-то подобное? Как лучше реализовать такое в модели?



Офлайн

#2 Июль 26, 2011 23:38:17

pill
От:
Зарегистрирован: 2010-08-27
Сообщения: 223
Репутация: +  0  -
Профиль   Отправить e-mail  

Какой тип поля выбрать в модели?

Почему не сделать три отдельных булевых поля?

Вообще для работы с битовыми полями использовал https://github.com/godshall/django-bitfield - в принципе нормально, только не помню работает ли он с modelForm.



Отредактировано (Июль 26, 2011 23:39:22)

Офлайн

#3 Июль 27, 2011 07:21:08

Yuego
От:
Зарегистрирован: 2011-07-26
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Какой тип поля выбрать в модели?

pill
Почему не сделать три отдельных булевых поля?
Возможно, придется сделать так, если по-другому не выйдет. Но по логике приложения все три поля должны быть в одной группе.
То, что должно получиться, имеет такой вид:

Уведомлять: На руки, По почте, По email.

Если использовать 3 битовых поля, варианты будут разнесены по форме. Получается нелогично и некрасиво.

Вот я и ищу какой-то компромисс между простотой кода модели и кода формы - куда придется навешать меньше костылей :)

pill
Вообще для работы с битовыми полями использовал https://github.com/godshall/django-bitfield - в принципе нормально, только не помню работает ли он с modelForm.
За ссылку спасибо - попробую.



Офлайн

#4 Июль 27, 2011 08:13:58

razum2um
От:
Зарегистрирован: 2009-03-20
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Какой тип поля выбрать в модели?

Уведомлять: На руки, По почте, По email.
угу. а скажите, вам, наверное захочется получить всех юзеров, которые выбрали “по мылу” или “по мылу и по почте”…
а захочется вариант добавить?
не напоминает many2many?



Офлайн

#5 Июль 27, 2011 09:32:20

Yuego
От:
Зарегистрирован: 2011-07-26
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Какой тип поля выбрать в модели?

razum2um
угу. а скажите, вам, наверное захочется получить всех юзеров, которые выбрали “по мылу” или “по мылу и по почте”…
а захочется вариант добавить?
не напоминает many2many?
Я задумывался над m2m, но это нерационально. Вариантов всегда будет только 3. Зато в базе будет 2 лишних таблицы, одна из которых еще и расти будет.
Насчет поиска - такая задача тоже навряд ли возникнет. Искать, конечно, надо будет, но по другим полям.

Чтобы было понятнее, я пишу приложение для гос учреждения. Для автоматизации заполнения заявления по определенной форме. Форма утрверждена законом (понятно, что законы у нас как женщины непостоянны, но все же), поэтому меняться не будет.

Что касается “вариант добавить”, я посмотрел ссылку, что советовали выше - очень интересная штука. Только действительно не умеет как надо ModelForm. Уже частично поправил его, чтоб выглядело на форме как мне требуется. И, думаю, мой вопрос можно считать решенным.



Офлайн

#6 Авг. 1, 2011 11:40:23

dissdoc
От:
Зарегистрирован: 2009-12-12
Сообщения: 273
Репутация: +  0  -
Профиль   Отправить e-mail  

Какой тип поля выбрать в модели?

Я конечно скажу глупость, но почему не сделать

STATUS_CHOICES = (
(1, u'на руки'),
(2, u'по почте'),
(3, u'по мылу'),
)
status = models.IntegerField(choices=STATUS_CHOICES, default=3)



Офлайн

#7 Авг. 1, 2011 13:21:04

Yuego
От:
Зарегистрирован: 2011-07-26
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Какой тип поля выбрать в модели?

dissdoc
Я конечно скажу глупость, но почему не сделать
STATUS_CHOICES = (
(1, u'на руки'),
(2, u'по почте'),
(3, u'по мылу'),
)
status = models.IntegerField(choices=STATUS_CHOICES, default=3)
Потому, что должна быть возможность выбрать в том числе несколько разных вариантов одновременно.
А в указанном случае такое невозможно.

Я допилил bitfield (почти полностью), что упоминался выше. Теперь корректно генерится (в виде списка чекбоксов) и обрабатывается форма для этого поля. На днях добавлю комменты в код в соответствии с лицензией и выложу форк (или автору патч пошлю… не решил пока).
Мало ли.. мож кому пригодится :)

UPD
В общем, форкнул проект. Актуальная версия с моими изменениями лежит тут: https://github.com/Yuego/django-bitfield



Отредактировано (Авг. 1, 2011 19:41:18)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version