我有一个与我的model1链接的多对多字段。现在,我为此model1创建了一个表单,并将此多个字段添加到表单字段中,并使用FilteredSelectMultiple小部件对其进行编辑。现在,问题是相关的许多字段都有一个软删除选项,我在模型2中跟踪活动字段。所以,现在在表单中显示所有对象,即使它们被删除,有什么方法可以在这个表单字段中显示活动为true的对象。
我的模型表格如下:
class Editform(form.ModelForm):
class Media:
css = ..
js = ..
class Meta:
Model = model1
fields = [ "x", "y", "ManytoManyfield"]
widgets = {
'ManytoManyfield': FilteredSelectMultiple("Displaay name", False)
}
答案 0 :(得分:0)
This answer接近你想要的。我认为这可行。
您在ModelForm中创建一个额外字段,并使用查询填充它。
class Editform(form.ModelForm):
many_to_many_field_active = forms.ChoiceField(choices=[(m2m.id, m2m.name) for m2m in Model2.objects.filter(active=True)])
class Meta:
#...
widgets = {
'many_to_many_field_active': Select(attrs={'class': 'select'}),
答案 1 :(得分:0)
我使用模型表格中的multiplechoicefield解决了这个问题,如下所示。
def __init__(self, *args, **kwargs):
many_to_m_initial = kwargs['instance'].model2.all()
choices = [(m2m.id, m2m.name) for m2m in Model2.objects.filter(active=True)]
self.fields['my_field'] = forms.MultipleChoiceField(choices = choices, widget=FilteredSelectMultiple("verbose name", is_stacked=False, choices=choices))
self.initial['my_field'] = [ m2m.pk fpr m2m in many_to_m_initial ]