【问题标题】:Compare values in two tables and create a list in Django比较两个表中的值并在 Django 中创建一个列表
【发布时间】:2023-03-21 03:25:01
【问题描述】:

我有两个模型。我需要从 Model1 中提取 Model2 中不存在的 employeeno 数据。如何做到这一点?

模型1

class Employee(models.Model):
    employeeno = models.CharField(max_length=50, null=False, unique=True)
    project = models.ForeignKey(Project, null=False)
    days = models.IntegerField('Number of Days', null=False)

模型2

class RemEmployee(models.Model):
    employeeno = models.ForeignKey(Employee, null=False, unique=True)
    reason= models.CharField(max_length=500, null=False)

【问题讨论】:

    标签: django


    【解决方案1】:

    我可以从您的数据模型中了解到,您想要获取那些 RemEmployee 表中不作为外键存在的员工对象

    所以,您可以通过以下查询

    找到这个
    Employee.objects.filter(rememployee__isnull=True).values_list('employeeno', flat=True)
    

    注意:尽管您在 RemEmployee 中将外键设为唯一,这使其成为 OneToOne 键(与问题无关,只是告诉)

    【讨论】:

    • 谢谢萨希尔。这解决了问题。但是,出于好奇,如果所选模型是 Model2 和 Model3(此处未定义。假设它看起来类似于 Model2),如何处理相同的问题?
    • 看不懂,请解释一下,我知道Model3也有Model2到Model1这样的外键。您想使用 Model2 和 Model3 查询什么?
    • 需要从Model2中提取Model3中不存在的employeeno数据。这里,employeeno 条目是 Model2 和 Model3 中的外键。
    • 你可以试试这个:(未测试)RemEmployee.objects.filter(employeeno__model3__isnull=True).distinct().values_list('employeeno__employeeno', flat=True)
    【解决方案2】:
    Employee.objects.exclude(employeeno__in=RemEmployee.objects.values_list('employeeno', flat=True))
    

    这将返回所有employeeno 未被任何RemEmployee 对象共享的Employee 对象。

    【讨论】:

    • 我收到此错误:运算符不存在:字符变化 = 整数第 1 行:...NOT ("employee_creator_employeeno"."employeeno" IN (SELECT... 提示:没有运算符匹配给定名称和参数类型。您可能需要添加显式类型转换。
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多