django - 我将如何在 Django 中执行此查询?

标签 django django-models django-queryset

假设我有三个模型:UserCarBrandCarModelCarCharacteristicsCarCharacteristics 模型描述了用户如何评价汽车的特性。因此,一个用户可以有许多 CarCharacteristics 对象,并且一个用户可以有许多 CarCharacteristics

这就是我的模型的样子:

class User(models.Model):
    id = models.AutoField(primary_key=True)

class CarBrand(models.Model):
    idcar_brand = models.AutoField(primary_key=True)

class CarModel(models.Model):
    idcar_model = models.AutoField(primary_key=True)
    car_brand = models.ForeignKey(CarBrand, null=True, on_delete=models.SET_NULL)

class CarCharacteristics(models.Model):
    idcar_characteristics = models.AutoField(primary_key=True)
    user = models.ForeignKey(User, on_delete=models.PROTECT)
    car_model = models.ForeignKey(CarModel, on_delete=models.PROTECT)

我想做的是获取User具有CarCharacteristics的所有CarBrand对象。这就是我现在正在做的事情:

car_chars = CarCharacteristics.objects.filter(user=user_id)
car_brands_ids = []
for car_char in car_chars:
    brand_id = car_char.car_model.car_brand.idcar_brand
    if brand_id not in car_brands_ids:
        car_brands_ids.append(brand_id)
brands = CarBrand.objects.filter(idcar_brand__in=brand_ids)

有更简单的方法吗?如何获取存在 CarCharacteristics 的所有 CarModels

最佳答案

试试这个:

CarBrand.objects.exclude(carmodel__carcharacteristics__user=None).distinct()

关于django - 我将如何在 Django 中执行此查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14494351/

相关文章:

python - Django 。仅获取当前日期。只有没有时间的日子

python - 使用 django-filter 按单个日期过滤

python - Django为评论添加评论模型

sql - 从 Django 数据库中检索最近 10 个项目的更好方法

python - 如何从现有数据制造 Django ORM QueySet/从纯 SQL 返回 ORM 查询?

django - Django:对列表中的所有项目进行匹配的ManyToMany过滤器

django - 如何仅在某些情况下禁用 Django 的 csrf 保护?

python - Django 注解对另一个注解有副作用

django - 如何计算多对多的乘积之和

django - 如何在 django 中自动创建模型?