python - 如何排除Django中的数据
问题描述
我试图排除我的 orderRequest 表中的订单,但它仅显示 orderRequest 表中的订单并排除其他订单。函数获取正确的订单 ID,但不排除该订单。它排除其他订单并显示已经在 orderRequest 表中的订单
视图.py
class OrderProduct_View(TemplateView):
template_name = 'purchase/orderProduct.html'
def get(self, request, *args, **kwargs):
allOrder = OrderProduct.objects.all()
allOrd = Order.objects.all()
categories = Category.objects.all()
categoryId = self.request.GET.get('SelectCategory')
product = Product.objects.filter(category_id=categoryId)
def filter_order(order):
try:
orderReq = order.orderRequest
return orderReq
except:
return True
filteredOrders = list(filter(filter_order, allOrd))
args = {'categories': categories, 'product': product, 'filteredOrders': filteredOrders}
return render(request, self.template_name, args)
模型.py
class OrderProduct(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
description = models.CharField(max_length=90)
quantity = models.IntegerField()
order_cancel = models.BooleanField(default=False)
class Order(models.Model):
orderProduct = models.ForeignKey(OrderProduct, on_delete=models.CASCADE)
created_by = models.CharField(max_length=20)
created_at = models.DateTimeField(auto_now_add=True)
destination = models.CharField(max_length=30)
vendor = models.ForeignKey(Vendor, on_delete=models.CASCADE)
shipping_cost = models.IntegerField()
class OrderRequest(models.Model):
order_status = models.CharField(max_length=10)
order = models.OneToOneField(Order, related_name='orderRequest', on_delete=models.CASCADE)
HTML
{% for allOrders in filteredOrders%}
{{ allOrders.orderProduct.id }}
{{ allOrders.orderProduct.product.name }}
{{ allOrders.orderProduct.quantity }}
<button><a href="{% url 'allVendor' %}?product_id={{ allOrders.orderProduct.product.id }}&orderProducts_id={{ allOrders.orderProduct.id }}">Place Order</a></button>
{% endfor %}
解决方案
您可以使用isnull
查找 [Django docs]来查找没有相关实例的实例,因此要查找Order
没有OrderRequest
实例的实例,您可以使用:
Order.objects.filter(orderRequest__isnull=True)
因此,您可以将视图写为:
class OrderProduct_View(TemplateView):
template_name = 'purchase/orderProduct.html'
def get(self, request, *args, **kwargs):
filteredOrders = Order.objects.filter(orderRequest__isnull=True)
categories = Category.objects.all()
categoryId = self.request.GET.get('SelectCategory')
product = Product.objects.filter(category_id=categoryId)
args = {'categories': categories, 'product': product, 'filteredOrders': filteredOrders}
return render(request, self.template_name, args)
注意:类名应该在
PascalCase
soOrderProductView
而不是. 变量名应该在OrderProduct_View
snake_case
sofiltered_orders
而不是等。请参阅PEP 8 -- Python 代码样式指南filteredOrders
推荐阅读
- python - 如何在 Python 中循环 GET 请求以从数据帧中的分页 API 接收所有数据
- docker - Consul 连接 Docker 容器中的上游接口
- javascript - 如何从 jquery 对话框中跟踪链接
- html - 如何使输入的边框位于父 div 的前面?
- regex - 最多包含三个单词的正则表达式
- r - R - data.frame 中来自现有数据的新条件列不起作用
- .net - 使用 .net core 2.1 和 Azure 上传大文件
- r - dplyr `nth()` 无法通过管道传输 [长度错误(n)== 1]
- javascript - 删除除主页以外的所有页面的公共页眉中的特定元素
- javascript - 如何分配一个 const 用于所有 js 文件函数?