Django:查询可过滤来自与我的Vehicle模型具有ForeignKey关系的2个模型中的数据

时间:2019-02-20 16:45:50

标签: django orm django-views

我正在尝试编写一个返回Vehicle对象的查询。该查询应按特定的Garage对象(即garage__name =)和特定的Category对象(即category__name =)以及Vehicle对象的可用< / strong>字段为 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.谁的可用字段为正确

Vehicle模型是否未在查询中获取Garage模型?

1 个答案:

答案 0 :(得分:1)

您的代码看起来不错,所以这很可能是typegrg变量中传递的内容的问题,而不是查询的问题。

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

  • 使用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实例(例如Car.objects.all())传递给它,并确保它显示正确的输出。