Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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-ManyToMany-如何筛选父对象的ManyToMany_Django_Django Models_Django Views - Fatal编程技术网

Django-ManyToMany-如何筛选父对象的ManyToMany

Django-ManyToMany-如何筛选父对象的ManyToMany,django,django-models,django-views,Django,Django Models,Django Views,我在queryset模型上编写过滤器时遇到问题: class Order(models.Model): items = models.ManyToManyField(OrderLine) store = models.ForeignKey(Store, blank=True, null=True, on_delete=models.SET_NULL) class OrderLine(models.Model): orderItemId = models.IntegerField(b

我在queryset模型上编写过滤器时遇到问题:

class Order(models.Model):
  items = models.ManyToManyField(OrderLine)
  store = models.ForeignKey(Store, blank=True, null=True, on_delete=models.SET_NULL)

class OrderLine(models.Model):
  orderItemId = models.IntegerField(blank=False, null=False, unique=True)
  quantity = models.IntegerField(blank=True, null=True)

class Store(models.Model):
  storeName = models.CharField(max_length=200, blank=True, null=True)
  access_from_account = models.ManyToManyField(EDUser, blank=True)
我有我的教育账户查询集 现在,我想选择属于来自存储区的订单的订单行,该存储区由access\u from\u account中的帐户可见

例如:

存储\u名称\u 1可以从\u帐户用户\u 1、用户\u 2访问\u

存储\u名称\u 2可以从\u帐户用户\u 1访问\u

不存在属于门店名称1的订单。这些订单有许多订单行。 我想选择用户1应该可以访问的订单行

我可以这样做吗 数量是['user_1'的查询集]

lines=OrderLine.objects.filterorder\uuuuu store\uuuu访问\uu from\u account\uuuuuu in=accounts? 我试过了,但我得到了一些奇怪的值

有没有关于如何正确做的建议?我希望避免列出清单,并对其进行迭代

提前感谢:

查询

lines = OrderLine.objects.filter(
    order__store__access_from_account__in=accounts
)
会很好地工作。唯一的问题是,如果帐户包含两个用户,如user1和user2,并且这两个帐户都可以访问一个存储,那么它将复制这些行。因此,您将检索user1和user2的订单行。这是由于中间连接表上的左侧外部连接造成的。您可以利用以下方法解决此问题:


在查找中不需要u,因此lines=OrderLine.objects.filterorder\uu store\uu access\u from\u account=user1就足够了,奇怪的值到底是什么?因此,对于我的一个只有几行的存储,我得到的结果就像有几百行一样。但是你的回答解决了我的问题。有福的。与众不同的:
lines = OrderLine.objects.filter(
    order__store__access_from_account__in=accounts
).distinct()
# for a single user

lines = OrderLine.objects.filter(
    order__store__access_from_account=myuser
)