Django 如何筛选列表中的许多字段?

Django 如何筛选列表中的许多字段?,django,many-to-many,django-1.5,Django,Many To Many,Django 1.5,我想改变这一点: 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

我想改变这一点:

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\uu-vpd\uu-in=[1,2,3,4,5])
应该可以工作。

应该是CanonPerson.objects.filter(persons\uu-vpd\uu-in=[1,2,3,4,5])不,它说:
TypeError:int()参数必须是字符串或数字,而不是“列表”
您的CanonPerson模型如何使用,
person.objects.filter(persons_u-vpd_u-in=[1,2,3,4,5])
应该可以工作…几乎是.CanonPerson.objects.filter(persons_u-vpd_u-id_u-in=[1,2,3,4,5])是的。我在第一条评论中提出了完全相同的建议,但他回答说这会产生一个错误。因为person.vpd是一个对象而不是数字。我的person.vpd.id在列表中,所以persons_uuvpd_uid_u应该起作用。@OdifYltsaeb我很抱歉,我相信我忽略了你评论中的
\uu in
。你最初的评论是正确的t。