python - 如何过滤两个模型之间的差异?使用 django
问题描述
我有 2 个模型,Product和ProductRelatedGroupAndProduct,Product有 5 个数据, [chicken, okra, ampalaya, cabbage] 和ProductRelatedGroupAndProduct有 [chicken, okra, cabbage] 我如何获得ProductRelatedGroupAndProduct中没有的剩余数据?
选择的产品是ProductRelatedGroupAndProduct,产品列表是Product
我只想让所选产品上显示的数据不再出现在产品列表中。
到目前为止这是我的views.py
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>
这是我的models.py
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
解决方案
您可以对过滤器使用反向关系:
Product.objects.filter(productrelatedgroupandproduct__isnull=True)
productrelatedgroupandproduct
这是ProductRelatedGroupAndProduct
模型的小写名称。这是related_query_name参数的默认值。
推荐阅读
- c# - C# 使用 ODBC 连接语法错误插入 SQL
- discord - 如何制作从消息中读取数据的嵌入?
- c# - 如何获取服务器(不是网络服务器)的 IP 地址,而是在 Xamarin.Forms 的 wifi 模块上创建的 TCP 服务器
- azure-devops - 如何为 Pull Request 设置默认审阅者?
- android - 如何在 Android 应用程序中将 Realm 结果流式传输到 LiveData
- angular - Angular 2 - 具有 ChangeDetectorRef 依赖项的测试组件
- api - Create Zoho campaign with api gives error
- c - How does linux thread run while main () return
- docker - DNS not working between two linked docker containers - getaddrinfo EAI_AGAIN error
- c# - WPF SQLite EF "No such table" if run application from startup of shell