2015-06-05 74 views
0

我有一个具有ManyToMany字段的模型。它来自预定义模式的合法数据库。当我为该模型创建模型表单时,它使用“多选”字段呈现“ManyToMany”字段。创建数据库的人想要一个选择字段(而不是多个)。ManyToManyField使用选择小部件

# models.py 

class MyModel(models.Model): 
    mtmfield = models.ManyToManyField(MyModel2) 

# forms.py 

class MyModelForm(ModelForm): 

    class Meta: 
     model = MyModel 
     widgets = Select() #this is what I want. 

使用select不会让我节省使用form.save()因为它的预期值的列表中选择型号。如果我通过覆盖模型表单的保存功能来捕获在Selected中选择的MyModel2并手动保存它,它会工作吗?

+0

我想边说form.MultipleChoiceField'将工作一样很好。它期望一个或多个值。你可以使用'form.save()'。但你试过了吗? – xyres

+0

是的,我做到了。我知道它的工作原理。但我希望它看起来像一个选择字段。作为演示文稿。 – Apostolos

+1

如果您想让它看起来像一个选择字段,请执行此操作 - “forms.MultipleChoiceField(widget = forms.Select)'。这会给你一个选择字段,但你将无法选择多个值。 – xyres

回答

0

您可能会考虑使用Select2。它可以作为单个选择样式元素呈现,但允许选择多个值。

-1

就在这个函数添加到您的窗体:

def clean_mtmfield(self): 
    data = self.cleaned_data['mtmfield'] 
    return [data] 
相关问题