【问题标题】:Django Query "not in" M2MDjango 查询“不在”M2M
【发布时间】:2021-07-28 07:58:37
【问题描述】:

我得到了这三个模型:

class Crcheck(models.Model):
   crlist = models.ForeignKey("crlists.Crlist", on_delete=models.CASCADE)  
   persons = models.ForeignKey("persons.Person", on_delete=models.CASCADE) 
   ...
| id  | crlist_id  |  persons_id |
| 41  |    2       |     64      |
| 42  |    3       |     64      |
class Cuslistprofile(models.Model):
   customer= models.ForeignKey("customers.Customer",on_delete=models.CASCADE) 
   crlist = models.ManyToManyField("crlists.Crlist") 
   ...
class Crlist(models.Model):
   dbname=models.CharField(max_length=200)
   ...

由于 M2M Django 生成此表“cuslistprofiles_cuslistprofile_crlist”:

| id  | cuslistprofile_id  |  crlist_id |
| 9   |    4               |     2      |
| 13  |    4               |     3      |
| 14  |    4               |     5      |
| 19  |    4               |     7      |

我想获取“cuslistprofiles_cuslistprofile_crlist”中但“crcheck”中缺少的所有 crlist 值。在这个特定示例中,我想检索 57

如何在 Django ORM 中实现这一点?

【问题讨论】:

    标签: django postgresql django-models


    【解决方案1】:

    您可以.filter(…) [Django-doc] 使用:

    Crlist.objects.filter(<b>cuslistprofile__isnull=False, crcheck=None</b>).distinct()

    可以使用双下划线 (__) 来查看“通过”关系。

    【讨论】:

    • 成功了,我只添加了几个过滤器就可以了。
    猜你喜欢
    • 2019-02-24
    • 1970-01-01
    • 2010-10-22
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多