我有两个模型,Product和ProductRelatedGroupAndProduct,ProductRelatedGroupAndProduct有5个数据,[chicken,okra,ampalaya,colla],而ProductRelatedGroupAndProduct有[chicken,okra,colla]如何获取产品中ProductRelatedGroupAndProduct中没有的剩余数据
选择的产品是产品相关组和产品,产品列表是产品
我只希望choosen产品上显示的数据在产品列表中不再可见
到目前为止,这是我的观点
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>
这是我的模特
class ProductRelatedGroupAndProduct(models.Model):
product = models.ForeignKey(Product,on_delete=models.SET_NULL, null=True,blank=True,verbose_name="Product")
productrelatedgroup = models.ForeignKey('ProductGroup',
on_delete=models.SET_NULL, null=True, blank=True,
verbose_name="ProductGroup")
class Product(models.Model):
product = models.CharField(max_length=500)
class ProductGroup(models.Model):
category = models.CharField(max_length=500, blank=True)
更新
当我尝试这个的时候
diffproducts = products.exclude(pk__in=relatedproduct)
print(diffproducts)
它打印产品的所有数据
<QuerySet [<Product: cabbage>, <Product: ampalaya>, <Product: okra>, <Product: Chicken>]>
当我尝试这个的时候
unused_product = set(relatedproduct).difference(set(products))
print(unused_product)
***result***
{<ProductRelatedGroupAndProduct: cabbage>, <ProductRelatedGroupAndProduct: ampalaya>, <ProductRelatedGroupAndProduct: okra>}
还有这个
Product.objects.filter(productrelatedgroupandproduct__isnull=True)
我得到这个错误
django.core.exceptions.FieldError: Cannot resolve keyword 'productrelatedgroupandproduct' into field
这可以通过将查询集转换为集合,然后对复杂情况使用
intersection
来实现在您的情况下
exclude
可以做到以下几点:products.exclude(pk__in=relatedproduct)
您可以使用reverse relation作为筛选器:
productrelatedgroupandproduct
这里是ProductRelatedGroupAndProduct
模型的小写名称。它是related_query_name参数的默认值您可以使用排除功能:
views.py:
并以原始html格式在模板中输出
相关问题 更多 >
编程相关推荐