Django.Теория: Реализация multiple checkboxes?

Всем привет.



Я пишу сервис про продаже/аренде недвижимости.

Интересует следующий вопрос:



Есть объект назовем его например «Дом»,

у дома есть следующие параметры:



1. «Название»

2. «Тип отопления» следующими вариантами выбора
  • Газовое отопление
  • Центральное отопление
  • Масляное(дизельное) отопление
  • Электрическое отопление
  • Подогрев пола
  • Солнечные батареи
  • Дровяное отопление


3. «Кухня»
  • Встроенная кухня
  • Кухонная ниша
  • Кухня-столовая
  • Кухня-остров
  • Открытая кухня




и так далее.

Все параметры строго определены в коде, т.е. нет нужды из создавать/редактировать в БД.



Все варианты в форме должны быть реализованы в виде checkbox с возможностью

множественного выбора.



Собственно вопрос, как реализовать модель в django, чтобы:

1. Форма перезаполняла множественные «чекбоксы»

2. Осуществлять поиск по этих параметрах, например найти дом с «Газовое отопление» и «Встроенная кухня»

3. Как сохранять в БД отмеченные опции?



Вариант номер один:

Реализовать все с помощью ForeignKey

Минус: ресурсоемко, много запросов...etc



Вариант номер два:

Сохранять в базе запись вида «kitchen: option1, option2, option4»

Но как при таком варианте нормально реализовать поиск, отображать форму с отмечаемыми полями.



Буду благодарен за совет.
  • Вопрос задан
  • 4421 просмотр
Пригласить эксперта
Ответы на вопрос 2
variable
@variable
>>Реализовать все с помощью ForeignKey
для множественного селекта вам понадобится ManyToManyField

KITCHEN_OPTIONS = (
(1, 'Встроенная кухня'),
(2, 'Кухонная ниша'),
(3, 'Кухня-столовая'),
(4, 'Кухня-остров'),
(5, 'Открытая кухня'),
)

class KitchenChoices(models.Model):
options = models.CharField(max_length=100, blank = True, choices=KITCHEN_OPTIONS)

class Apartment(models.Model):
kitchen_type = models.ManyToManyField(KitchenChoices)


в темплейте это поле не выводить автоматически а сделать итерацию по опциям и построить чекбоксы, с соответствующими лабелами, и значением…

вопрос, надо ли вам сохранять форму с фронтенда, или только делать поиск по полям… отсюда варианты разветвляются…
если сохранять не надо, то в админке получите множественный селект для сохранения опций… если надо — то
при сохранении формы

class Apartment(models.Model):
kitchen = models.CharField(max_length=100, blank = True, choices=KITCHEN_OPTIONS)


в темплейте это поле не выводить автоматически а сделать итерация
Ответ написан
Riateche
@Riateche
Если набор чекбоксов фиксирован, нужно завести в модели «дом» поле на каждый из чекбоксов.

В форме на каждое поле вешаете чекбокс. Только стандартный шаблон не подойдет, придется верстать свой, чтобы чекбоксы показывались несколькими списками. Но это не страшно.

Поиск выполняется тривиально — всё в одной таблице.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
25 нояб. 2020, в 17:27
70000 руб./за проект
25 нояб. 2020, в 17:26
15000 руб./за проект
25 нояб. 2020, в 17:19
1000 руб./за проект