Найти - Пользователи
Полная версия: Какой тип поля выбрать в модели?
Начало » Django » Какой тип поля выбрать в модели?
1
Yuego
Имеется некоторая модель, и форма (ModelForm) которая эту модель отображает.

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

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

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

Вообще для работы с битовыми полями использовал https://github.com/godshall/django-bitfield - в принципе нормально, только не помню работает ли он с modelForm.
Yuego
pill
Почему не сделать три отдельных булевых поля?
Возможно, придется сделать так, если по-другому не выйдет. Но по логике приложения все три поля должны быть в одной группе.
То, что должно получиться, имеет такой вид:

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

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

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

pill
Вообще для работы с битовыми полями использовал https://github.com/godshall/django-bitfield - в принципе нормально, только не помню работает ли он с modelForm.
За ссылку спасибо - попробую.
razum2um
Уведомлять: На руки, По почте, По email.
угу. а скажите, вам, наверное захочется получить всех юзеров, которые выбрали “по мылу” или “по мылу и по почте”…
а захочется вариант добавить?
не напоминает many2many?
Yuego
razum2um
угу. а скажите, вам, наверное захочется получить всех юзеров, которые выбрали “по мылу” или “по мылу и по почте”…
а захочется вариант добавить?
не напоминает many2many?
Я задумывался над m2m, но это нерационально. Вариантов всегда будет только 3. Зато в базе будет 2 лишних таблицы, одна из которых еще и расти будет.
Насчет поиска - такая задача тоже навряд ли возникнет. Искать, конечно, надо будет, но по другим полям.

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

Что касается “вариант добавить”, я посмотрел ссылку, что советовали выше - очень интересная штука. Только действительно не умеет как надо ModelForm. Уже частично поправил его, чтоб выглядело на форме как мне требуется. И, думаю, мой вопрос можно считать решенным.
dissdoc
Я конечно скажу глупость, но почему не сделать
STATUS_CHOICES = (
(1, u'на руки'),
(2, u'по почте'),
(3, u'по мылу'),
)
status = models.IntegerField(choices=STATUS_CHOICES, default=3)
Yuego
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
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