2014-12-12 2 views
2

Я довольно новичок в Django и Python в целом, и я работаю над своим первым сольным приложением, и у меня есть небольшая проблема с выяснением того, как сделать что-то с моими моделями:Django получает связанные объекты в отношениях «многие ко многим»

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 

То, что я хочу сделать, это получить список всех объектов, которые имеют отношение к конкретному объекту B, возможно ли это?

Я могу фильтровать все B с соответствующим именем из A и получить список всех вещей в B, которые имеют, что соотношение:

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

(каталог «/» должен быть «<», не конечно, как отформатировать это), поэтому я подумал, что можно будет по-другому двигаться.

Любая помощь приветствуется, спасибо.

+1

Вы должны отступа '__str__' один уровень справа. – karthikr

+0

Спасибо, это правильно в моем источнике, просто отформатировано здесь неправильно. – Rob

ответ

3

Вы можете получить список объектов A, которые связаны с конкретным объектом B:

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) 
+0

Ahha! Спасибо! – Rob

Смежные вопросы