たまたま、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')
フォーム.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',)
フィーチャー フォームである 2 番目の部分と、Checkbox Multiselect フィールドの選択肢を入力するためのある種の js を実装します。
def _all を def all に変更するクエリセットをチェーンする方法について、@akaihola の回答を修正しました。そして、それはうまくいきました。
今の質問は次のとおりです。それが最善の解決策ですか?