在 Django 中过滤 ModelForm 在 Web 表单中显示空选择
Filtering ModelForm in django shows empty choice in web form
我正在尝试按 Djangos stock Groups 过滤一些选择,但是当我在 Web 表单中这样做时是空的。
如果我在筛选时直接输入组号,就可以了。也许我的论点有问题?
在 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)
#...
当您为 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})
我正在尝试按 Djangos stock Groups 过滤一些选择,但是当我在 Web 表单中这样做时是空的。
如果我在筛选时直接输入组号,就可以了。也许我的论点有问题?
在 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)
#...
当您为 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})