姜戈在values_list后得到原始对象



我的学生模型:

class Student(Person):
father = models.ForeignKey('Person', on_delete=models.SET_NULL, blank=True, 
null=True,related_name='student_father',help_text=_('Father'))
mother = models.ForeignKey('Person', on_delete=models.SET_NULL, blank=True, 
null=True,related_name=_('student_mother'),help_text=_('Mother'))
classroom = models.IntegerField(ClassRoom.choices(), null=True, blank=True, 
help_text=_('Classroom'))
..and some other fields

我想根据"名称","父亲","母亲"字段获取重复的对象。我发现了带有values_list("名称","母亲","父亲"(的重复对象,但是我无法通过这种方式访问对象的id。如果我将id字段添加到values_list方法找不到重复的对象。

Student.objects.values('name', 'father', 'mother').annotate(Count('name')).order_by().filter(name__count__gt=1)

在此查询之后,我需要学生对象的 id。

你尝试做的事情没有意义。

您正在聚合许多记录,然后仅查找其中一个聚合对象的 PK。

考虑名称"Bill"存在于 8 条记录中的场景。你希望返回哪个PK,哪个记录?

您需要执行第二个查询,以获取具有重复名称的对象的 PK:

names_list = Student.objects.values('name', 'father', 'mother').annotate(Count('name')).order_by().filter(name__count__gt=1)
for names in names_list:
duplicates = Student.objects.filter(name=names.name)
for dup in duplicates:
print dup.pk

一旦你调用values_list()values(),你就无法取回原来的对象。values()返回字典,而不是模型实例。但是,如果需要主键,只需将pk添加到值列表中:

Student.objects.values('pk', 'name', 'father', 'mother')
.annotate(Count('name'))
.order_by()
.filter(name__count__gt=1)

相关内容

  • 没有找到相关文章

最新更新