Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django-获取多个集合中的项目_Django_Django Models_Django Templates_Django Queryset - Fatal编程技术网

Django-获取多个集合中的项目

Django-获取多个集合中的项目,django,django-models,django-templates,django-queryset,Django,Django Models,Django Templates,Django Queryset,我的模型: class ItemSet(models.Model): name = models.CharField(max_length=30) item = models.ManyToManyField(Item) order = models.IntegerField(default=0) class Item(models.Model): name = models.CharField(max_length=30) desc = models.C

我的模型:

class ItemSet(models.Model):
    name = models.CharField(max_length=30)
    item = models.ManyToManyField(Item)
    order = models.IntegerField(default=0)

class Item(models.Model):
    name = models.CharField(max_length=30)
    desc = models.CharField(max_length=100)
一个集合包括许多项目,一个项目可以是多个集合。 那么,当我们知道某些集合中某个项的id而不是它本身时,如何获得该项的列表呢? 请给我一些密码。多谢各位

示例: 我们有两套这样的: (1,2,3,4)和(2,3,5,7,9),
id=3,然后结果=(1,2,4,5,7,9)。注意:结果不包括3。

获取特定
项目集中的所有
项目

set = ItemSet.objects.get(id=99)
items = set.item.all()
获取包含特定
项的所有
项集

item = Item.objects.get(id=88)
sets = item.itemset_set.all()

有关更多信息,请参见。

如果我正确理解了您的问题,您希望从包含特定
项目的所有
项目集
中获得一个不同的项目集,从返回集中排除
项目本身。听起来是这样吗

编辑:已测试

class ItemSet(models.Model):
    name = models.CharField(max_length=30)
    items = models.ManyToManyField('Item', related_name='item_sets')
    order = models.IntegerField(default=0)

class Item(models.Model):
    name = models.CharField(max_length=30)
    desc = models.CharField(max_length=100)

# First, get all sets containing the item we're interested in:
item_sets = ItemSet.objects.filter(items__pk=item.pk)
# Next, get all items belonging to those sets, excluding the item we're interested in:
items = Item.objects.filter(item_sets__pk__in=item_sets).exclude(pk=item.pk).distinct()
注意:这实际上执行一个查询(使用Django 1.2.1),不过,这可能取决于您的数据库后端。您可以像这样检查生成的SQL:

>>> from django.db import connection
>>> items._as_sql(connection)
...

当我们知道某些集合中某个项目的id而不知道其本身时,如何获取项目列表
:您能重新表述这句话并添加一个示例吗?抱歉,我添加了一个您希望的考试,只是因为我有大量的项目。我想为查询选择一种最佳方式。谢谢从传统的方式开始。根据需要进行优化。永远不要过早。