我有一个Partner的模型

class Partner(models.Model):
    name = models.CharField(max_length=100, blank=True, null=True)
    group = models.OneToOneField(
        Group, on_delete=models.DO_NOTHING, blank=True, null=True)

    def __str__(self):
        return self.name

我还有另外两个型号,一个是CustomUser,另一个是Quote

class CustomUser(AbstractUser):
    #...
    name = models.CharField(max_length=160, null=True, blank=True)
    partner = models.ManyToManyField(
        Partner, blank=True)

class Quote(models.Model):
    #...
    visibility = models.CharField(max_length=10)
    partner = models.ManyToManyField(
        Partner, blank=True)

两者都有一个与ManyToManyField-to-partner模型相关的partner字段

现在,我想在如下视图中对它们进行比较:

如何在Quote和CustomUser模型中找到彼此匹配的合作伙伴

比方说,其中一个Quote对象在ManyToManyField中有一组[partner1和partner6],我只想让在其partner ManyToManyField集中也有partner1和partner6的用户访问该Quote.

那么我该如何筛选和比较它们呢?

编辑:我可以稍微解释一下,比如从报价中的一整套合作伙伴中,如果一个合作伙伴与CustomUser的一组合作伙伴匹配,那么CustomUser也应该可以访问它.

推荐答案

你可以通过以下方式获得.filter(…) [Django-doc]分:

Quote.objects.filter(partner__customuser=my_user)

这将返回QuerySetQuote,其中at leastPartner103个相同.

相同的Quote将被返回,返回次数与共有Partner次相同.您可以使用.distinct() [Django-doc]来避免:

Quote.objects.filter(partner__customuser=my_user).distinct()

Django相关问答推荐

在Django的反向函数中添加动态URL

按下按钮刷新在html文件中显示的变量

如何在 Django 模板视图中显示我的数据?

如何根据反向外键相关模型的字段过滤 QuerySet?

当我告诉它时,如何使用 Django 的记录器来记录回溯?

如何在 Django 中创建一个独特的 slug

Django 视图 - 首先从调用应用程序的目录加载模板

删除所有表的django命令是什么?

Django - 在模板中显示当前日期和时间

Django -- User.DoesNotExist 不存在?

django 有条件地过滤对象

Django模型字段按变量

对 django 的 Http Delete 请求返回 301

在 docker 容器中创建 django 超级用户而不输入密码

Django ORM 能否以可靠的与后端无关的方式存储无符号 64 位整数(又名 ulong64 或 uint64)?

Python - 覆盖 __init__ 的最干净方法,其中在 super() 调用之后必须使用可选的 kwarg?

如何在不发送信号的情况下保存模型?

Django:如何过滤属于特定组的用户

如何仅在某些情况下禁用 Django 的 csrf 保护?

如何在不同的元素上添加注释?