2017-03-16 70 views
0

我已經構建了以下模型。我認爲這可以很容易地被問到,但我真的堅持!意見模型的在Django ModelForm中顯示屬於某個組的用戶

部分

class Task(models.Model): 
    Taskdetails = models.CharField(max_length=500, null=True)  
    employee = models.ForeignKey("auth.User", null = True) 

    def __str__(self): 
     return str(self.id) 

class TaskForm (ModelForm): 

    class Meta: 
     model = Task 
     fields = ('Taskdetails','employee',) 

部分

def task_new(request): 
    if request.method == "POST": 
     task_form = TaskForm(request.POST) 

     if task_form.is_valid(): 
      task_form.employee = User.objects.filter(groups__name='supervisor') 

所以在我的模板w^hile我創建了一個模型實例,在下拉菜單中,我試圖只顯示屬於某個組的用戶(在本例中是組管理員)。相反,在模板中,下拉菜單會顯示所有用戶,而不會考慮我放入視圖中的過濾器。

綜上所述,我試圖在Django 1.9版中找出通過組來篩選用戶。

同樣重要的是要提到我使用默認的用戶模型,因此屬性未在模型中聲明。當我將下面的代碼行寫入Python控制檯時,它僅顯示屬於組「主管」的用戶。

User.objects.filter(groups__name='supervisor') 
+0

這可能幫助:http://stackoverflow.com/questions/1810891/django-how-to-filter-users-that-belong-to -a-specific-group –

回答

0

顯示窗體時,正確的希望將員工限制特定用戶(監事)?

然後我不明白你爲什麼形式的員工字段設置爲一定值後張貼的形式。

你可能需要的是這樣的:

class TaskForm(forms.ModelForm): 
    class Meta: 
     model = Task 
     fields = ('Taskdetails','employee',) 

    def __init__(self, *args,**kwargs): 
     super (TaskForm,self).__init__(*args,**kwargs) 
     self.fields['employee'].queryset = User.objects.filter(groups__name='supervisor') 
+0

它幾乎可以工作!我忘了提及另一個重要的部分:在我保存這個實例之後,另一個屬於不同組的用戶需要編輯**相同表單**(不同的視圖模板),但是在這個第二個表單中之前)需要顯示來自不同組的用戶(例如「技術人員」)。如果我在init中聲明groups_name = supervisor,那麼在每個表單中只會顯示屬於組管理器的用戶!有沒有辦法做到這一點?謝謝你的幫助! –

+0

檢查這個答案:http://stackoverflow.com/a/8841565/630877 基本上,你必須另外檢查你的窗體中的'request.user'。 根據用戶,您可以對employee-queryset使用不同的過濾器('groups__name = ...')。 – arie

相關問題