2017-07-27 68 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

非常感谢。所以,如果我理解正确,我实际上不需要在获取后传递参数? –

相关问题