【发布时间】:2014-10-29 10:35:14
【问题描述】:
我想改变这个:
cpses = CanonPerson.objects.filter(persons__vpd = 1)
到这里:
cpses = CanonPerson.objects.filter(persons__vpd in [1, 2, 3, 4, 5])
但这会引发异常:
NameError: global name 'persons__vpd' is not defined
型号:
class CanonPerson(models.Model):
p_id = models.PositiveIntegerField(primary_key=True)
persons = models.ManyToManyField(Person, related_name='persons')
class Person(models.Model):
vp_id = models.AutoField(primary_key=True)
p_id = models.PositiveIntegerField(db_index=True)
vpd = models.ForeignKey(VPD, db_column='vpd')
class VPD(models.Model):
id = models.SmallIntegerField(primary_key=True)
name = models.CharField(max_length=100)
【问题讨论】:
-
应该是 CanonPerson.objects.filter(persons__vpd__in = [1, 2, 3, 4, 5])
-
不,它说:
TypeError: int() argument must be a string or a number, not 'list' -
你的 CanonPerson 模型怎么样?
-
使用 docs.djangoproject.com/en/dev/topics/db/queries/… ,
CanonPerson.objects.filter(persons__vpd__in=[1,2,3,4,5])应该可以工作... -
差不多。 CanonPerson.objects.filter(persons__vpd__id__in=[1,2,3,4,5])
标签: django many-to-many django-1.5