2015-06-05 73 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] 
相關問題