【问题标题】:Comparing two rows from the same table比较同一个表中的两行
【发布时间】:2020-03-09 00:02:57
【问题描述】:

我有来自同一个表的两行,我想为这些行获取具有不同值的列名。

我知道我可以通过一个简单的for 循环来实现这一点,如下例所示,但也许 django 已经有一种方法可以完成这一点。

class MyModel(models.Model):
    name = models.CharField(max_length=30)
    email = models.EmailField()
#---
a = MyModel(name='A', email='a@z.com')
a.save()
b = MyModel(name='B', email='b@z.com')
b.save()
#---
recA = MyModel.object.get(pk=1)
recB = MyModel.object.get(pk=2)
#---
diff = []
colNames = [
    'email', 
    'name', 
]
for a in colNames:
    if getattr(recA, a) == getattr(recB, a):
        pass
    else:
        diff.append(a)

【问题讨论】:

  • 你能分享一些你想如何比较的代码吗?
  • @ruddra。已添加示例。

标签: django python-3.x django-models


【解决方案1】:

如果您想要至少一列具有不同值的行,您可以这样查询:

result = MyModel.objects.filter(pk__in=[1,2]).distinct().values('email','name')

distinct() 将消除查询结果中的重复行。

【讨论】:

  • 这不会告诉我两行中 email 和/或 name 的值是否不同。如果结果不为空,我只知道至少有一列不同,但我不知道哪一列。
  • 然后你可以像这样在 values() 之后链接 distinct() 函数: result = MyModel.objects.filter(p__in=[1,2]).values('email','name ').distinct()
  • 不。这将返回 MyModel.id = 2 的整行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多