首页 > 解决方案 > Django:从与我的 Vehicle 模型具有 ForeignKey 关系的 2 个模型中过滤数据的查询

问题描述

我正在尝试编写一个返回Vehicle对象的查询。查询应按特定Garage对象(即garage__name = )和特定Category对象(即category__name = )进行过滤,并且Vehicle对象的可用字段为True(available = 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匹配的车辆来显示车辆。Category3.可用字段为True

模型没有在查询中Vehicle获取模型吗?Garage

标签: djangoormdjango-views

解决方案


您的代码看起来不错,因此这可能是在typeandgrg变量中传递的内容有问题,而不是您的查询有问题。

要调试,请尝试以下操作:

  • 使用print()命令将存储在typegrg变量中的值输出到终端。检查以确保它们符合预期。
  • 用户$ python manage.py shell启动您的终端,然后手动运行您的查询以确保它返回预期的输出。from .models import Vehicle, 那么Vehicle.objects.filter(category__name='REAL CATEGORY', garage__name='REAL GARAGE', available=True). 确保您得到结果。如果您不这样做,请尝试逐一删除标准,直到您可以找出问题的根源。
  • 确保您的模板Car在提供实例时正确显示实例。尝试将Car您知道存在的 a 的实例(例如,Car.objects.all())传递给它,并确保它显示正确的输出。

推荐阅读