Django查询集过滤器

时间:2019-03-07 20:37:44

标签: sql django django-queryset

我正在尝试创建一个查询集,以过滤用户租用的所有汽车。 汽车租赁模型有一个外键,用于存储汽车租赁时的用户ID

我当前的解决方案是这样的,在这里我得到当前的用户ID,然后尝试根据用户ID筛选Cars数据库。

view.py:

def view_hire(request):
  current_users_id = request.user.id
  car_hired = Cars_hired.objects.filter(user_id__in=current_users_id) 
  args = 
  {
      'car_hired': car_hired,
  }

模型

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    def __str__(self):
        return str(self.user.id)

class car_hired(models.Model):
    car = models.ForeignKey('Car', on_delete=models.CASCADE)
    customer = models.ForeignKey('UserProfile', on_delete=models.CASCADE)
    start_date = models.DateField(help_text='Date of booking')
    end_time = models.DateField(help_text='Date of booking')


    def __str__(self):
        return str(self.id)

但是,我似乎无法使它正常工作,并且出现错误“'int'对象不可迭代”

我想创建一个查询集,该查询集返回与查询匹配的数据行

例如,如果当前用户的ID是10,我想获得该用户租用的所有汽车。所有数据存储在car_hirer_is == 10

的行中

1 个答案:

答案 0 :(得分:0)

这是导致错误的部分:

...(user_id__in=current_users_id)

当您添加 __ in 部分时,django会认为current_users_id是可迭代的,而current_users_id = request.user.id是单个ID。要使其正常运行,请将其更改为:

def view_hire(request):
  current_users_id = request.user.id
  car_hired = Cars_hired.objects.filter(customer__user_id=current_users_id)

我还将重新考虑变量的名称(current_user_id代替current_users_id,cars_hired代替car_hired)。