考虑以下Django模型设置:

from django.db import models

Class Foo(models.Model):
    field_foo = models.charField(max_length=20,
                                 null=False,
                                 blank=False,
                                 unique=True,)

Class Bar(models.Model):
    field_bar = models.charField(max_length=20,
                                 null=False,
                                 blank=False,
                                 unique=True,)

Class Foobar(models.Model):
    field_foo = models.ForeignKey(foo,on_delete=models.CASCADE)
    field_bar = models.ForeignKey(bar,on_delete=models.CASCADE)

我希望查找具有相同的field_foofield_bar值的两行.我可以手动完成此操作,但我想知道Django是否有一个功能可以解决这一问题.我现在这样做的方式是:

for f in Foo.objects.all():
    for b in Bar.objects.all():
        fb = Foobar.objects.filter(foo=f,bar=f)
        if len(fb)>2:
            something='do'

推荐答案

您可以同时使用annotate()和Filter()方法来筛选具有与关系相同的Foo和Bar实例的FooBar实例.

试一试这个

duplicate_foobars = Foobar.objects.values('field_foo', 'field_bar').annotate(
    count=Count('id')
).filter(
    count__gt=1
).values_list('field_foo', 'field_bar')

for field_foo, field_bar in duplicate_foobars:
    print(f"Duplicate Foobar: field_foo={field_foo}, field_bar={field_bar}")

输出

Duplicate Foobar: id=, field_foo=1, field_bar=1

经过测试的模型

class Foo(models.Model):
    field_foo = models.CharField(
        max_length=20,
        null=False,
        blank=False,
        unique=True,
    )


class Bar(models.Model):
    field_bar = models.CharField(
        max_length=20,
        null=False,
        blank=False,
        unique=True,
    )


class Foobar(models.Model):
    field_foo = models.ForeignKey(Foo, on_delete=models.CASCADE)
    field_bar = models.ForeignKey(Bar, on_delete=models.CASCADE)

Django相关问答推荐

我找不到为什么我的DRF登录测试没有按预期工作

构造一个定制字符串(实体、年份和字母数字的组合)作为Django中的Postgres数据库的主键是否明智?

在模板中自动添加变量

Django mods.py我想要一个函数转到一个变量

如何在Django中显示多个相关对象

Django:使用相同的外键在不同的应用程序中 Select 多个列

如何将 ManyToManyField 与另一个 ManyToManyField 进行比较

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

使用 Python/Django 上传大文件

Django 独立脚本

在 PyCharm 中运行 Django 测试

为什么 django 1.7 会为字段 Select 的变化创建迁移?

如何在 Django 中向 ChoiceField 添加class?

如何在 django admin 中显示布尔属性

Django REST Framework - 序列化可选字段

Django/Python初学者:执行python manage.py syncdb时出错-找不到psycopg2

UpdateView 中的success_url,基于传递的值

警告:找不到分发的 svn 位置==0.6.16dev-r0

Heroku & Django:OSError: No such file or directory:'/app/{myappname}/static'

Django 测试 - 在所有测试中修补对象