Django以多对多的关系获取相关对象

时间:2014-12-12 19:11:19

标签: python django django-models

我对Django和Python一般都很陌生,我正在制作我的第一个个人应用程序,而且我在弄清楚如何使用我的模型做一些事情时遇到了一些麻烦:

class A(models.Model):
    bs = models.ManyToManyField('B', null=True, blank=True, related_query_name='the_thing', db_table='A_B_relation')
    name = models.CharField(max_length=50,unique=True)

    def __str__(self):              # __unicode__ on Python 
        return self.name

class B(models.Model):
    url = models.URLField(null=True, blank=True)
    name = models.CharField(max_length=50,unique=True)

    def __str__(self):              # __unicode__ on Python 
        return self.name

我想要做的是获取A的所有对象的列表,这些对象与B的特定对象相关,这可能吗?

我可以使用A中的相关名称过滤所有B,并获取B中具有该关系的所有内容的列表:

>>> B.objects.filter(the_thing__name='abc')
    [/B: Bob>, /B: Jim>]

(" /"应该是"<",不知道如何格式化),所以我认为可以采取相反的方式

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:3)

您可以检索与特定B对象相关的A对象列表:

b_object = B.objects.get(name='Bob')
A.objects.filter(bs=b_object)

如果是B对象列表

b_object_list = B.objects.filter(name__in=['Bob', 'Jim'])
A.objects.filter(bs__in=b_object_list)