python - 具有多对多字段的自定义过滤器
问题描述
我收到一个错误,我的自定义过滤器基于如下所示的模型
class Order(models.Model):
STATUS = (
('Pending', 'Pending'),
('Out for delivery', 'Out for delivery'),
('Delivered', 'Delivered'),
)
customer = models.ForeignKey(Customer, null=True, on_delete = models.SET_NULL)
product = models.ForeignKey(Product, null=True, on_delete = models.SET_NULL)
date_created = models.DateTimeField(auto_now_add=True, null=True)
status = models.CharField(max_length=200, null=True, choices=STATUS)
note = models.CharField(max_length=1000, null=True)
b_address1 = models.CharField(max_length=1000, null=True)
b_address2 = models.CharField(max_length=1000, null=True, blank=True, default='')
b_city = models.CharField(max_length=1000, null=True)
b_county = models.CharField(max_length=1000, null=True)
b_post_code = models.CharField(max_length=1000, null=True)
def __str__(self):
return self.product.name
并在下面查看我的自定义过滤器
class OrderListFilter(django_filters.FilterSet):
q2 = django_filters.CharFilter(method="my_custom_order_filter")
class Meta:
model = Order
fields = ['q2']
def my_custom_order_filter(self, queryset, name, value):
return Order.objects.filter(
Q(status__icontains=value)
|Q(customer__icontains=value)
|Q(product__icontains=value))
请参阅下面的我的views.py
def orderList(request):
order_list = Order.objects.all().order_by('id')
myFilter3 = OrderListFilter(request.GET, queryset=order_list)
order_list = myFilter3.qs
context = {'order_list':order_list, 'myFilter3':myFilter3}
return render(request, 'accounts/customer_order_list.html', context)
另请参阅下面的模板
<div class="coolo">
<div class="form-group col-md-5 mb-10" >
<form method="get">
{% csrf_token %}
{{myFilter3.form | crispy}}
<a class="btn btn-primary" name = 'new_order' href="" role="button">NEW</a>
</div>
</div>
<div class="card card-body">
<table class="table">
<tr>
<th>ID</th>
<th>Product Name</th>
<th>Customer Name</th>
<th>Status</th>
<th>Edit Order</th>
<th>Delete Order</th>
</tr>
{% for i in order_list %}
<tr>
<td>ABC{{i.id}}</td>
<td>{{i.product}} </td>
<td>{{i.customer}}</td>
<td>{{i.status}}</td>
<td><a class="btn btn-sm btn-info" name= "edit_order" href="">Edit</a></td>
<td><a class="btn btn-sm btn-danger" href="">Delete</a></td>
</tr>
{% endfor %}
在我的模板中,我有基于我的订单模型的“订单”列表,并且在我的模板表单中,我想根据基于我的搜索表单的订单模型搜索我创建的实例。
但是我收到以下错误
FieldError at /customer_order_list/
Related Field got invalid lookup: icontains
我该如何解决这个问题?
解决方案
类 OrderListFilter(django_filters.FilterSet):
q2 = django_filters.CharFilter(method="my_custom_order_filter")
class Meta:
model = Order
fields = ['q2']
def my_custom_order_filter(self, queryset, name, value):
return Order.objects.filter(
Q(status__icontains=value)
|Q(customer__first_name__icontains=value)
|Q(customer__middle_name__icontains=value)
|Q(customer__last_name__icontains=value)
|Q(product__name__icontains=value))
推荐阅读
- reactjs - 如何对前端收到的 POST 请求进行操作?
- flutter - Flutter 登录/注销按钮实现
- python - 使用 BeautifulSoup 抓取 Javascript 注入的文本
- flutter - 我该怎么做才能拯救未来
在 Flutter 中使用 SharePreferences? - java - 带有圆括号表达式的 Spring Boot JPA 子查询
- azure - 有没有办法限制卡在 Azure DevOps 中从已解决到活动的移动?
- javascript - 在本地存储中设置对象的值
- javascript - 将索引作为键,这是一个好习惯吗?还是我应该使用 react-uuid?
- aggregate - DDD - 大型聚合并在聚合之间强制不变
- javascript - 无法使用浏览器控制台中的 javascript 从网站获取 html 正文