2013-01-24 47 views
2

我們假設我有三種型號:UserCarBrand,CarModel,CarCharacteristicsCarCharacteristics模型描述了用戶如何評價汽車的特性。因此,用戶可以有多個CarCharacteristics對象,並且用戶可以有多個CarCharacteristics我該如何在Django中執行此查詢?

這是我的模型是這樣的:

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) 

我想要做的是讓所有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

+0

所以沒有答案被證明是對你有用嗎? –

回答

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() 
1

試試這個:

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

那到底是什麼呢? –

0
CarBrand.objects.filter(carmodel__carcharacteristics__user=request.user).distinct()