2017-08-09 59 views
1

我試圖創建在我的網頁使用Django的形式使用FilterSelectMultiple在管理頁面準確工作就像一個用戶權限字段。目前,它正確地填充數據和選擇和取消按鈕正常工作,但我無法保存的形式,每當我點擊保存,頁面刷新,所有的用戶都再次取消。FilterSelectMultiple在Django的形式不節能

user = forms.ModelMultipleChoiceField(queryset=Project.objects.all(), 
                widget=FilteredSelectMultiple('User', is_stacked=False)) 

不工作。

我該如何解決這個問題?任何幫助是非常讚賞謝謝

下面是我的代碼:

HTML:

<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css" /> 
<link rel="stylesheet" type="text/css" href="/static/admin/css/forms.css" /> 

<form method="POST" enctype="multipart/form-data" id=setting_form" name="setting_form" onsubmit="updateDiv()">{% csrf_token %} 

<!--USER--> 
    <div class="field"> 
     <label>User permissions:</label> 
     <div class="related-widget-wrapper"> 
     <select name="user_permissions" id="id_user_permissions" multiple="multiple" class="selectfilter" data-field-name="user permissions" data-is-stacked="0"> 
      <option value={{ form.user }}></option> 
     </select> 
    </div> 

    <div class="btn-toolbar pull-right"> 
     <div class="btn-group" role="group" aria-label="..."> 
      <input class="btn btn-success" type="submit" value="Save Changes"/> 
     </div> 
    </div> 
</form> 

<script src="/admin/jsi18n"></script> 
<script type="text/javascript" src="/static/admin/js/vendor/jquery/jquery.js"></script> 
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script> 

View.py

def project_setting(request): 
    form = EditProjectForm(request.POST or None, request.FILES or None, instance=selected_project, prefix='settings') 
    if form.is_valid(): 
     inst = form.save(commit=False) 
     inst.save() 
     form.save_m2m() 
     return HttpResponseRedirect('/dashboard/projects/{}/setting'.format(project_id)) 

    context = { 

     'form': form, 
    } 
    return render(request, 'dashboard/projects/setting.html', context=context) 

Form.py:

from django.contrib.admin.widgets import FilteredSelectMultiple 

class EditProjectForm(forms.ModelForm): 

    class Meta: 
     model = Project 
     fields = '__all__' 
     user = forms.ModelMultipleChoiceField(queryset=Project.objects.all(), 
               widget=FilteredSelectMultiple('User', is_stacked=False)) 

Model.py:

class Project(models.Model): 
    user = models.ManyToManyField(Employee, blank=True) 

編輯:

檢查網頁源代碼後,我的形式宣佈這樣

<select name="user_permissions" id="id_user_permissions" multiple="multiple" class="selectfilter" data-field-name="user permissions" data-is-stacked="0"> 
     <option value=<select name="settings-user" id="id_settings-user" multiple="multiple"> 
     <option value="3">User A</option> 
     <option value="4">User B</option> 
    </select></option> 
</select> 

它宣佈另一個<select><select>標籤內

回答

1

我不是熟悉那個小部件,但是,將用戶字段渲染到選項標籤中看起來很奇怪。我也看不到結束表單標記或提交按鈕?

我會想到它會去是這樣的:

<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css" /> 
<link rel="stylesheet" type="text/css" href="/static/admin/css/forms.css" /> 

<form method="POST" enctype="multipart/form-data" id=setting_form" name="setting_form" onsubmit="updateDiv()">{% csrf_token %} 

<!--USER--> 
    <div class="field"> 
     <label>User permissions:</label> 
     <div class="related-widget-wrapper"> 
     {{form.user}} 
    </div> 
    <input type="submit" value="save"> 
</form> 
<script src="/admin/jsi18n"></script> 
<script type="text/javascript" src="/static/admin/js/vendor/jquery/jquery.js"></script> 
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script> 
+0

我的道歉,我簡化了我的代碼,我忘了加上提交按鈕和關閉標籤,謝謝指點出來, 是,我原來的語法是'{{form.user}}',但是該字段將顯示爲標準的'ManytoManyField'。我希望它顯示爲'FilteredSelectMultiple' –

+0

那麼接下來指定'小部件= FilteredSelectMultiple(「用戶」,is_stacked = FALSE)'有沒有影響? –

+0

是的,這是正確的,它顯示的原因是因爲我重新選擇領域就像從管理頁面用戶權限,改變價值,它應該已經工作,但它填充選擇,因此現在我在他們各自的領域適當取消數據米只是想搞清楚如何保存 –