Python 如何筛选这两种模型之间的差异?使用django
我有两个模型,Product和ProductRelatedGroupAndProduct,ProductRelatedGroupAndProduct有5个数据,[chicken,okra,ampalaya,colla],而ProductRelatedGroupAndProduct有[chicken,okra,colla]如何获取产品中ProductRelatedGroupAndProduct中没有的剩余数据 所选产品为ProductRelatedGroupAndProduct,产品列表为product 我只希望choosen产品上显示的数据在产品列表中不再可见 到目前为止,这是我的观点Python 如何筛选这两种模型之间的差异?使用django,python,django,Python,Django,我有两个模型,Product和ProductRelatedGroupAndProduct,ProductRelatedGroupAndProduct有5个数据,[chicken,okra,ampalaya,colla],而ProductRelatedGroupAndProduct有[chicken,okra,colla]如何获取产品中ProductRelatedGroupAndProduct中没有的剩余数据 所选产品为ProductRelatedGroupAndProduct,产品列表为pro
def searchrelatedproduct(request):
id = request.GET.get('relatedproductID')
products = Product.objects.all()
relatedproduct = ProductRelatedGroupAndProduct.objects.filter(productrelatedgroup = id)
return render(request, "customAdmin/relatedproduct.html",{"products":products,"relatedproduct":relatedproduct})
这是我的html
<div class="container">
<form method="POST" action="/GroupOfProduct/" enctype="multipart/form-data">{% csrf_token %}
<h2>Product </h2>
<div class="form-group">
<br>
<label for="sel2">List Of Products</label>
<select multiple class="form-control" id="sel2" name="product">
{% for product in products %}
<option>{{product.product}}</option>
{% endfor %}
</select>
</div>
<input type="submit" style="float:right;">
</form>
</div>
<div class="container">
<h2>Choosen Product</h2>
<form method="POST" action="/UpdateGroupOfProduct/" enctype="multipart/form-data">{% csrf_token %}
<input type="submit" style="float:right;">
<div class="form-group">
<br>
<label for="sel2">List Of Choosen Products</label>
<select multiple class="form-control" id="sel2" name="relatedproduct">
{% for product in relatedproduct %}
<option value="{{ product.id }}">{{product.product}}</option>
{% endfor %}
</select>
</div>
</form>
</div>
更新
当我尝试这个的时候
diffproducts = products.exclude(pk__in=relatedproduct)
print(diffproducts)
unused_product = set(relatedproduct).difference(set(products))
print(unused_product)
***result***
{<ProductRelatedGroupAndProduct: cabbage>, <ProductRelatedGroupAndProduct: ampalaya>, <ProductRelatedGroupAndProduct: okra>}
它打印产品的所有数据
<QuerySet [<Product: cabbage>, <Product: ampalaya>, <Product: okra>, <Product: Chicken>]>
我得到这个错误
django.core.exceptions.FieldError: Cannot resolve keyword 'productrelatedgroupandproduct' into field
您可以使用以下选项进行筛选:
Product.objects.filter(productrelatedgroupandproduct__isnull=True)
productrelatedgroupandproduct
这里是productrelatedgroupandproduct
模型的小写名称。这是参数的默认值。这可以通过将查询集转换为集合,然后对复杂情况使用交集来实现
# get objects present in both
set(products).intersection(set(relatedproduct))
# get product not in relatedproduct
set(products).difference(set(relatedproduct))
# opposite
set(relatedproduct).difference(set(products))
在您的情况下,exclude
可以实现以下功能:
products.exclude(pk\uu in=relatedproduct)
您可以使用exclude功能:
views.py:
def searchrelatedproduct(request):
id = request.GET.get('relatedproductID')
products = Product.objects.all()
relatedproduct = ProductRelatedGroupAndProduct.objects.filter(pk=id)
diffproducts = products.exclude(pk__in=relatedproduct)
return render(request, "test.html",{"products":diffproducts,"relatedproduct":relatedproduct})
并以原始html格式在模板中输出。共享您的模型。py.好的,请wait@djangotic检查我更新的问题我尝试了这个,但我得到了这个结果******@justin你确定你做了
Product.objects.filter(productrelatedgroupandproduct\uu isnull=True)
?因为它返回Product
对象的Queryset。但您说它返回ProductRelatedGroupAndProduct
.django.core.exceptions.FieldError:无法将关键字“ProductRelatedGroupAndProduct”解析为我的产品模型中的字段,我没有外国钥匙ProductRelatedGroupAndProduct@justin但是,由于在ProductRelatedGroupAndProduct
中有Product
的外键,因此可以使用ProductRelatedGroupAndProduct
筛选产品。检查我的答案中的链接。至于无法解析关键字“productrelatedgroupandproduct”
您是否显示了实际代码?可能模型有不同的名称?它像查询集一样打印所有数据。用htmlit更新我的答案打印所有数据,答案更新。您的测试的url是什么?你通过了relatedproductId吗?我发布了我的完整模型。请检查我更新的问题我如何使用集合(relatedproduct)。差异(集合(products))?在你的searchrelatedproduct
中,例如:unused\u product=set(relatedproduct)。差异(集合(products))
,然后像对待产品一样在返回中通过它。然后循环,然后在模板中打印所有数据
# get objects present in both
set(products).intersection(set(relatedproduct))
# get product not in relatedproduct
set(products).difference(set(relatedproduct))
# opposite
set(relatedproduct).difference(set(products))
def searchrelatedproduct(request):
id = request.GET.get('relatedproductID')
products = Product.objects.all()
relatedproduct = ProductRelatedGroupAndProduct.objects.filter(pk=id)
diffproducts = products.exclude(pk__in=relatedproduct)
return render(request, "test.html",{"products":diffproducts,"relatedproduct":relatedproduct})