在我的模型中,我有一个多对多字段
mentors = models.ManyToManyField(MentorArea, verbose_name='Areas', blank=True)
在我的表单中,我想将其呈现为:
包含所有未与对象关联的 MentorArea 对象列表的下拉框。
旁边是一个添加按钮,它将调用一个 javascript 函数,该函数会将其添加到对象中。
然后在一个 ul 列表下,每个选定的 MentorArea 对象旁边都有 ax,它再次调用一个 javascript 函数,该函数将从对象中删除 MentorArea。
我知道要更改字段元素的呈现方式,您需要创建一个自定义小部件并覆盖呈现函数,我已经这样做来创建添加按钮。
class AreaWidget(widgets.Select):
def render(self, name, value, attrs=None, choices=()):
jquery = u'''
<input class="button def" type="button" value="Add" id="Add Area" />'''
output = super(AreaWidget, self).render(name, value, attrs, choices)
return output + mark_safe(jquery)
但是我不知道如何将当前选定的列表作为列表列出。谁能帮我?还有什么是过滤列表的最佳方法,以便它只显示尚未添加的 MentorArea 对象?我目前有这个领域
mentors = forms.ModelMultipleChoiceField(queryset=MentorArea.objects.all(), widget = AreaWidget, required=False)
但这会显示所有导师,无论他们是否已添加。
谢谢