django один виджет для двух полей m2m

У меня есть два поля manytomany для моей модели ModelFrom, которые относятся к одной и той же модели, назовите ее ModelTo.

ModelFrom(models.Model):
    field_one = ManyToManyField(ModelTo)
    checked = ManyToManyField(ModelTo)

Checked является подмножеством первого поля. Я правильно проверил это в методах model clean() и adminform clean() и обновил model::save() для вызова self.full_clean().

В идеале у меня был бы один виджет, очень похожий на django.forms.SelectMultiple, но с флажком внутри каждого <option>.

как это выглядит сейчас, у меня есть один из этих виджетов для каждого поля: current look:

Я хочу объединить их и установить флажок или что-то в этом роде, вот мое представление юникода о том, как это будет выглядеть

{ [бла: 2 ☐] , [бла: 1 ☑] }

Значение в списке -> поле 1 установлено. Флажок -> флажок установлен, поскольку он является подмножеством field_one.

Я видел виджет jQuery UI MultiSelect Widget, но, похоже, нет способа выбрать параметр, но не установить флажок.


person straykiwi    schedule 12.03.2015    source источник
comment
Я не совсем понимаю, чего вы хотите достичь, но может ли ModelMultipleChoiceField с CheckboxSelectMultiple выполнить эту работу?   -  person ger.s.brett    schedule 13.03.2015


Ответы (1)


Я не мог напрямую ответить на свой вопрос, но, как и на большинство вопросов, если ответ невозможен, может быть основная проблема.

Вместо двух полей many2many я должен иметь только одно, устанавливающее свойство through для промежуточного поля. Вот так:

class IntermediateField(models.Model):
     checked = BooleanField()
     from = ForeignKey(ModelFrom)
     to = ForeignKey(ModelTo)  

ModelFrom(models.Model):
    field_one = ManyToManyField(ModelTo, through=IntermediateField)

Затем мы можем просто использовать встроенный для IntermediateField в администраторе ModelFrom, легко устанавливая флажки и т. д.

person straykiwi    schedule 29.03.2015