2016-09-09 2 views
0

Я использую Django 1.9 и Python 2.7.Django - Следуйте за назад ForeignKey, а затем ForeignKey (запрос)

Мое приложение имеет четыре модели. Каждая «поездка» состоит из нескольких «шагов», выбранных посетителем, которые относятся к «местам», которые могут иметь несколько связанных «изображений».

class Trip(models.Model): 
    title = models.CharField(max_length=140, blank=True) 

class Step(models.Model): 
    theplace = models.ForeignKey(ThePlace) 
    trip = models.ForeignKey(Trip) 

class ThePlace(models.Model): 
    name = models.CharField(max_length=200) 

class Picture(models.Model): 
    file = models.ImageField(upload_to="pictures") 
    slug = models.SlugField(max_length=100, blank=True) 
    theplace = models.ForeignKey(ThePlace, null=True, blank=True) 

Я хотел бы получить все "Изображение" объекты, которые связаны с конкретной поездки, используя существующий "selectedtrip" QuerySet:

selectedtrip = Trip.objects.filter(author=request.user)[0] 
pictures = selectedtrip.step_set.all().theplace.picture_set.all() 

Django выводит следующее сообщение об ошибке: «AttributeError: Объект QuerySet не имеет атрибута 'theplace' " Любая идея, почему?

ответ

1

Потому что all() возвращает запрос, который представляет собой набор элементов; theplace - это атрибут на отдельном шаге, а не в коллекции.

Способ выполнения этого типа запроса состоит в том, чтобы начать с класса, который вы хотите получить, и следовать отношениям в запросе, используя синтаксис двойного подчеркивания. Таким образом:

Picture.objects.filter(theplace__step__trip=selectedtrip) 
+0

Crystal clear! Большое спасибо ! –