Rimush
@Rimush

Можно ли в модели добавить несколько элементов циклом?

Нужно создать модель с более чем 80 чекбоксами.
Есть ли способ сделать это циклом или другим способом?
  • Вопрос задан
  • 44 просмотра
Решения вопроса 1
Rimush
@Rimush Автор вопроса
Сделал через ManyToManyField

Создал таблицу с регионами:
class Region(models.Model):
    region_name = models.CharField(verbose_name='Название', max_length=100)
    region_id = models.PositiveIntegerField(verbose_name='Код субъекта', default=0)

    def __str__(self):
        return f'{self.region_id:02} - {self.region_name}'

    class Meta:
        verbose_name_plural = 'Регионы'
        verbose_name = 'регион'


Добавил в модель models.ManyToManyField(Region, blank=True)
class Geography(SingletonModel):

    title = models.CharField(verbose_name='Заголовок', max_length=200)
    slug = models.SlugField(verbose_name='Алиас', unique=True, blank=True, max_length=255)
    image = models.ImageField(verbose_name='Картинка', blank=True, upload_to='images')
    text = models.TextField(verbose_name='Текст')
    regions = models.ManyToManyField(Region, blank=True)

    def save(self):
        super(Geography, self).save()
        if not self.slug:
            self.slug = slugify(self.title) + '-' + str(self.id)
            super(Geography, self).save()

    def __str__(self):
        return self.title

    class Meta:
        verbose_name_plural = 'География'
        verbose_name = 'география'


А во view добавил:
from django.db import models
from django.forms import CheckboxSelectMultiple

class GeographyAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.ManyToManyField: {'widget': CheckboxSelectMultiple},
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@bacon
Например, создать словарь,foo(x=1, y=2) равносильно foo(**{'x':1 , 'y': 2}), так же есть функция setattr
Хотя "модель с более чем 80 чекбоксами" обычно намекает на проблему при проектировании.
Ответ написан
fox_12
@fox_12 Куратор тега Django
Расставляю биты, управляю заряженными частицами
В Django модели есть IntegerField в нем 8 байт - вполне достаточно чтобы хранить 64 битовых состояний.
Ну либо строку в CharField из 80 "0" или "1"
Ну или ArrayField из bool
Или JSONField в котором хранить dict из состояний чекбоксов
и т.п.

В общем - достаточно вариантов чтобы избавиться от такой дичи вроде создания циклом полей в модели.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы