class Product(models.Model):
name = models.CharField(max_length=256)
class Group(models.Model):
name = models.CharField(max_length=32, unique=False)
products = models.ManyToManyField(Product, blank=True)
group.pk中的产品== 1:
products = Group.objects.get(pk=1).products.all().values('name')
结果:
<QuerySet [
{"name": "product1"},
{"name": "product2"},
{"name": "product3"},
]
我如何知道每种产品属于哪些群组?像这样:
<QuerySet [
{"name": "product1", "groups": [{"pk": 1, "name": "group1"}]},
{"name": "product2", "groups": []"},
{"name": "product3", "groups": [{"pk": 1, "name": "group1"}, {"pk": 2, "name": "group2"}},
]
谢谢!
UPD1。
如果我们有数据:
group1 | product 1
group1 | product 2
group2 | product 2
group2 | product 3
创建表(html)的想法如下:
/组/ 1:
product 1 | dropdown (group1)
product 2 | dropdown (group1, group2)
/组/ 2:
product 2 | dropdown (group1, group2)
product 3 | dropdown (group2)
答案 0 :(得分:0)
根据我的理解,您希望从您的manytomany字段到模型进行反向查找。
您可以像这样获得产品组:
此处product
是一个Product对象,您希望列出与该产品关联的所有组。
product.group_set.all()
答案 1 :(得分:0)
值采用另一个名为&#39; group&#39;用它来获取相关组。没有给出你想要的期望结果。但是提出想法。
>>> Product.objects.all().values('name', 'group')
<QuerySet [
{'group': 1, 'name': u'Product 3'},
{'group': 2, 'name': u'Product 3'},
{'group': 1, 'name': u'Product 2'},
{'group': 2, 'name': u'Product 1'}]>
答案 2 :(得分:0)
获得Product
个实例后:
product = Product.objects.get(pk=1)
它知道哪些Group
实例引用它。使用group_set
字段:
groups = product.group_set.all()
通过声明相关对象(使用ForeignKey
或ManyToManyField
),关系gets an implied field的“另一端”来访问引用此实例的实例。
在这种情况下,该字段名为group_set
,它是引用此Group
实例的Product
个实例的模型管理器。
答案 3 :(得分:0)
model.py:
context['products'] = Group.objects.get(pk=1).products.all()
return render(request, 'template.html', context)
template.html:
{% for product in products %}
{{ product.name }}
COUNT: {{ product.group_set.count }}
<ul>
{% for group in product.group_set.all %}
<li>{{ group.name }}</li>
{% endfor %}
</ul>
{% endfor %}
解决方案并不困难,因为以下原因而感到困惑:
{% for group in slave_product.group_set.all() %} # ()
感谢所有人!