Item in list but index is always 0
我有一个这样的查询集:
1 | asignaturas_equivalencia_alumno = list(Asignaturas_Equivalencia.objects.filter(matricula=inscripcion.usuario.adicional.matricula, origen_de_equivalencia ="SEP").distinct()) |
然后我循环它们并打印索引,如果它在列表中并且是模型的属性:
1 2 | for _as in asignaturas_equivalencia_alumno: print _as in asignaturas_equivalencia_alumno, asignaturas_equivalencia_alumno.index(_as), _as.clave_materia |
结果是不同的,但是索引,索引总是返回0,输出:
1 2 3 4 5 6 7 8 9 10 11 12 | True 0 L1C115 True 0 L1PS101 True 0 L1C116 True 0 L1C118 True 0 L1PS105 True 0 L1PS107 True 0 L1PS109 True 0 L1PS111 True 0 L1C113 True 0 L1C114 True 0 L1C117 True 0 L1PS102 |
谢谢:
编辑
模型:
1 2 3 4 5 6 7 8 9 | class Asignaturas_Equivalencia(models.Model): matricula = models.CharField(max_length=10, primary_key=True) clave_materia = models.CharField(max_length=9) calificacion = models.CharField(max_length=2) origen_de_equivalencia = models.CharField(max_length=4) fecha_registro = models.DateTimeField(auto_now_add=True) class Meta: db_table = 'diccionario_equivalencias_materias' |
再次编辑
这个问题唯一的解决办法是使用枚举。
正如其他人正确地提到的,对于有序的不可抗力成员来说,平等测试可能是脆弱的。但是,如果您想循环遍历内容并拥有索引,那么简单地使用枚举就更容易、更高效了。
1 2 | for index,_as in enumerate(asignaturas_equivalencia_alumno): print _as in asignaturas_equivalencia_alumno, index, _as.clave_materia |
检查并再次检查您的主键。在我看来,他们是唯一能把你的平等检查搞砸的东西。
当两个对象属于同一类且具有相同的pk时,Django的ORM的
从Django模型文档中:
"Each model requires exactly one field to have primary_key=True
(either explicitly declared or automatically added)."
(强调矿山)
您有不同的项目,如
也许你写了自己的
类似这样的事情(IPython会话):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | In [44]: class Foo: def __eq__(self, s): return True ....: In [45]: a = Foo() In [46]: b = Foo() In [47]: a == b Out[47]: True In [48]: l = [a,b, Foo()] In [49]: l Out[49]: [<__main__.Foo at 0xb5c68b2c>, <__main__.Foo at 0xb670ad0c>, <__main__.Foo at 0xb5e0352c>] In [50]: for item in l: print(l.index(item)) ....: 0 0 0 |