Виджет Django ManytoMany для CheckboxSelectMultiple и связанных наборов запросов - PullRequest
1 голос
/ 22 марта 2011

Случилось так, что мне нужно, чтобы поле ManytoMany отображалось как CheckboxSelectMultiple, с этим проблем нет.Уловка в том, что есть поля по умолчанию для отображения, и пользователь должен иметь возможность добавить новый параметр, и этот параметр должен отображаться в форме.

Вот что я сделал:

models.py

class Feature(models.Model):
   name = models.CharField( _("Feature Name"), max_length=40)
   default = models.BooleanField(_("Is Global Feature"), default = False)

class SomeModel(models.Model):
   features = models.ManyToManyField(Feature, related_name='features')

forms.py

class FeatureForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
    somemodel = kwargs['somemodel']
    kwargs.pop('somemodel')
    super(SpaFeatureForm, self).__init__(*args, **kwargs)
    default_features = Feature.objects.filter(default=True)
    custom_features = somemodel.features.filter(default=False)
    q_set = QuerySetChain(default_features, custom_features)
    self.fields['features'].widget = forms.CheckboxSelectMultiple()
    self.fields['features'].queryset = q_set

class Meta:
    model = m.Spa
    fields = ('features',)

Я по-прежнему буду реализовывать вторую часть, которая будет формой объектов и чем-то вроде js, для заполнения поля Checkbox Multiselectварианты выбора.


Я изменил @akaihola answer о том, как связать наборы запросов, меняя def _all на def all.И это работало нормально.

Вопрос теперь: это лучшее решение?

...