2

それで、私が3つのモデルを持っているとしましょう:User、、、、。このモデルは、ユーザーが車の特性をどのように評価するかを示しています。したがって、ユーザーには多くのオブジェクトが存在する可能性があり、ユーザーは多くのオブジェクトを持つことができます。CarBrandCarModelCarCharacteristicsCarCharacteristicsCarCharacteristicsCarCharacteristics

これは私のモデルがどのように見えるかです:

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)

私がやりたいのは、aが。を持つすべてのCarBrandオブジェクトを取得することです。これは私が今していることです:UserCarCharacteristics

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)

これを行う簡単な方法はありますか?そして、どうすればCarModels存在するすべての場所を取得できCarCharacteristicsますか?

4

3 に答える 3

1

これを試して:

CarBrand.objects.exclude(carmodel__carcharacteristics__user=None).distinct()
于 2013-01-24T05:09:15.943 に答える
1

私はそれを理解したと思います。私はこれがうまくいくと思います:

user_id = request.user.pk
brands = CarBrand.objects.exclude(~Q(carmodel__carcharacteristics__user=user_id))

編集

私が上に持っているものもこれと同等です:

user_id = request.user.pk
car_models = CarModel.objects.filter(carcharacteristics__user=user_id)
brands = CarBrand.objects.filter(carmodel__in=car_models).distinct()
于 2013-01-24T05:19:43.107 に答える
0
CarBrand.objects.filter(carmodel__carcharacteristics__user=request.user).distinct()
于 2013-01-24T09:13:58.807 に答える