Django: запрос, который фильтрует данные из 2 моделей, имеющих отношение ForeignKey к моей модели транспортного средства - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь написать запрос, который возвращает Vehicle объектов.Запрос должен фильтроваться по конкретному объекту Garage (т. Е. Garage__name =) и по конкретному объекту Category (т. Е. Category__name =), и где поле available объекта Vehicle равно True (доступно = True).Это модели:

class Garage(models.Model):
    name = models.CharField (max_length = 30, blank=False)
    zip = models.IntegerField (blank=False)
    area = models.CharField (max_length = 30, blank=False)
    pic = models.ImageField (upload_to ='static/images/garages')

class Vehicle(models.Model):
    car_no = models.CharField (max_length = 20, blank=False)
    photo = models.ImageField (upload_to ='static/images/vehicles')
    car_model = models.ForeignKey (Car_model, on_delete=models.CASCADE)
    garage = models.ForeignKey (Garage, on_delete=models.CASCADE)
    category = models.ForeignKey (Category, on_delete=models.CASCADE)
    available = models.BooleanField(default=True)

class Category(models.Model):
    name = models.CharField (max_length = 15, blank=False)

В соответствующей функции просмотра я попробовал следующее:

def carSelectView(request, type, grg):
    cars=Vehicle.objects.filter(category__name=type, garage__name=grg, available=True)
    return render(request, 'carphotoselectpage.html', {'ca':cars})

Но он возвращает пустую страницу.До этого я пытался получить автомобили только определенной категории, и это сработало:

def carSelectView(request, type):
    cars = Vehicle.objects.filter(category__name = type).filter(available=True)

Я не могу понять, в чем проблема.Я хочу показать автомобили: 1. выбрав конкретный Garage, а затем 2. выбрав автомобили из того Garage, который соответствует названию Category.3. Чье доступное поле равно True .

Неужели модель Vehicle не получает модель Garage в запросе?

1 Ответ

0 голосов
/ 20 февраля 2019

Ваш код выглядит нормально, поэтому, скорее всего, это связано с тем, что передается в переменных type и grg, а не с запросом.

Для отладки попробуйте следующее:

  • Используйте команды print() для вывода значений, хранящихся в переменных type и grg, на ваш терминал.Убедитесь, что они соответствуют ожидаемым значениям.
  • Пользователь $ python manage.py shell для загрузки терминала, а затем вручную выполните запрос, чтобы убедиться, что он возвращает ожидаемый результат.from .models import Vehicle, затем Vehicle.objects.filter(category__name='REAL CATEGORY', garage__name='REAL GARAGE', available=True).Убедитесь, что вы получите результаты обратно.если вы этого не сделаете, попробуйте удалить критерии по одному, пока не сможете изолировать источник проблемы.
  • Убедитесь, что ваш шаблон правильно отображает Car экземпляров, когда они предоставляются вместе с ними.Попробуйте передать ему экземпляр Car, который, как вы знаете, существует (например, Car.objects.all()) и убедитесь, что он отображает правильный вывод.
...