gpt4 book ai didi

python - 过滤表单内的查询集

转载 作者:行者123 更新时间:2023-12-04 10:15:25 25 4
gpt4 key购买 nike

我有一个包含工作订单列表的应用程序,另一个包含零件列表的应用程序。

class Order(models.Model):
parts = models.ManyToManyField(Part, blank=True) # Assosiated parts

class Part(models.Model):
partnum = models.CharField(max_length=20) # Part number
mwos = models.ManyToManyField('mtn.Order', blank=True) # Assosiated work orders

现在我想给我的 DetailView 添加一个按钮对于将打开零件列表的订单,我将能够将其添加到我的订单中。目前我已经创建了一个 UpdateView我的订单
class AddPartView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):   
model = Order
form_class = AddPartForm
...

和一个表格
class AddPartForm(forms.ModelForm):
class Meta:
model = Order
fields = ['parts', ]
labels = {'parts': "Parts", }

def FilterList(request):
qs = Part.objects.all()
search_part_query = request.GET.get('search_part')

if is_valid_queryparam(search_part_query):
qs = qs.filter(Q(partnum__icontains=search_part_query)
| Q(descr__icontains=search_part_query)
).distinct()

return qs

def __init__(self, *args, **kwargs):

super(AddPartForm, self).__init__(*args, **kwargs)

self.fields["parts"].widget = CheckboxSelectMultiple()
self.fields["parts"].queryset = self.FilterList()

对于这个模板
{% block content %}

<form method="GET" action=".">
<div class="form-row justify-content-start">
<div class="form-group col-md align-self-center">
<div class="input-group">
<input class="form-conrol py-2 border-right-0 border" type="search" placeholder="Find part" name="search_part">
<span class="input-group-append">
<div class="input-group-text bg-transparent">
<i class="fa fa-search"></i>
</div>
</span>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary btn-sm btn-block">Search</button>
</form>

<form action="{% url 'mtn:add_part' order.id %}" method='post'>
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Save</button>
</form>

{% endblock content %}

但是当我执行它时我得到 'AddPartForm' object has no attribute 'GET'错误。

我是编程新手,所以也许我以错误的方式接近这个。

最佳答案

表单通常不知道 request目的。您可以制作这样的表格,例如:

class AddPartForm(forms.ModelForm):
class Meta:
model = Order
fields = ['parts', ]
labels = {'parts': "Parts", }
widgets = {
'parts': CheckboxSelectMultiple
}

def filter_list(self, request):
qs = Part.objects.all()
search_part_query = request.GET.get('search_part')

if is_valid_queryparam(search_part_query):
qs = qs.filter(Q(partnum__icontains=search_part_query)
| Q(descr__icontains=search_part_query)
).distinct()

return qs

def __init__(self, *args, request=None, **kwargs):
super(AddPartForm, self).__init__(*args, **kwargs)
self.fields["parts"].queryset = self.filter_list(request)

AddPartView ,您可以通过 request通过覆盖 .get_form_kwargs(..) method [Django-doc] 作为表单的参数
class AddPartView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):   
model = Order
form_class = AddPartForm

def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs.update(request=self.request)
return kwargs

关于python - 过滤表单内的查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61085125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com