2017-07-27 99 views
0

我知道這個主題已經在這裏覆蓋,但請裸露在我身邊。 我想通過Djangos股票組篩選一些選擇,但是當我在Web表單中這樣做時爲空。在Django中過濾ModelForm顯示網絡表單中的空選項

如果我在過濾時直接放組號碼,它就會起作用。也許我的論點有問題嗎?

在views.py

我:

class AddSupplier(generic.View): 
    form_class = CreateOrder 
    template_name = 'order/order_form.html' 

    #blank, ce je get metoda 
    def get(self, request): 
     form = self.form_class(None) 
     return render(request, self.template_name, {'form': form}) 

    def post(self, request): 

     group = self.request.user.groups.values_list('id', flat=True).first() 
     # I tried: 
     # group = self.request.user.groups.all() 
     # same result 

     form = self.form_class(group, request.POST) 

     if form.is_valid(): 
      createS = form.save(commit=False) 

      supplier = form.cleaned_data['supplier'] 

      createS.save() 

     return render(request, self.template_name, {'form': form}) 

forms.py

class CreateOrder(forms.ModelForm): 
    def __init__(self, group,*args,**kwargs): 
     super (CreateOrder, self).__init__(*args,**kwargs) 
     self.fields['supplier'].queryset = Supplier.objects.filter(group_s=group) # if I put group = 1 it works 

    class Meta: 
     model = Order 
     fields = [ 
      'supplier', 
     ] 

和怎麼想的連接models.py:

class Supplier(models.Model): 
    #... 
    group_s = models.ManyToManyField(Group, help_text="kateri dobavitelji imajo katere stranke") 
    #... 

class Order(models.Model): 
    #... 
    supplier = models.ForeignKey(Supplier, on_delete=models.SET_NULL, null=True) 
    #... 

回答

0

您目前還包括當你實例化get請求時,group。嘗試將代碼更改爲:

def get(self, request): 
    group = self.request.user.groups.values_list('id', flat=True).first() 
    form = self.form_class(group, None) 
    return render(request, self.template_name, {'form': form}) 
+0

謝謝,解決了這個問題。 –

+0

請注意'values_list()'不是必需的。如果你使用了'group = self.request.user.groups..first()',它的工作原理是一樣的。 – Alasdair

+0

非常感謝。所以,如果我理解正確,我實際上不需要在獲取後傳遞參數? –

相關問題