我試圖讓他們在Django上計算最多的10輛汽車。從Django數據庫獲取總計算
Calculations
模型如下:
class Calculations(models.Model):
user = models.ForeignKey(to=User)
category = models.CharField(max_length=127)
make = models.CharField(max_length=127)
model = models.CharField(max_length=127)
first_registration = models.CharField(max_length=127)
body = models.CharField(max_length=127)
facelift = models.CharField(max_length=127)
engine = models.CharField(max_length=127)
drive = models.CharField(max_length=127)
transmission = models.CharField(max_length=127)
trim = models.CharField(max_length=127, null=True, blank=True)
mileage = models.IntegerField()
vat_inclusive = models.NullBooleanField(null=True)
price_date = models.DateTimeField(auto_now_add=True)
market_days_identical = models.CharField(max_length=6, null=True)
market_days_similar = models.CharField(max_length=6, null=True)
sales_price = models.DecimalField(max_digits=8, decimal_places=2, null=True)
sales_price_currency = models.CharField(max_length=10, null=True)
purchase_price = models.DecimalField(max_digits=8, decimal_places=2, null=True)
purchase_price_currency = models.CharField(max_length=10, null=True)
adjusted_price = models.DecimalField(max_digits=8, decimal_places=2, null=True, blank=True)
customer = models.ForeignKey(to=Customer, null=True, blank=True, on_delete=models.SET_NULL)
data = models.TextField(null=True, blank=True)
查詢,我用的是如下:
calculations_list = Calculations.objects.values_list('make', 'model', 'first_registration', 'body', 'facelift', 'engine', 'drive','transmission', 'mileage')
.distinct()
.annotate(num_calculations=Count('make'))
.order_by('-num_calculations')[:10]
這個查詢給我:
<QuerySet [
('BMW', 'M3', '1/2017', 'SALOON/4 doors', '2014', 'M3', 'RWD', 'MANUAL ', 70000, 6),
('Audi', 'A4', '1/2017', ' SALOON/4 doors', '2012', '2.0 TDI', 'FWD', 'MANUAL ', 70000, 4),
('BMW', '7 series', '1/2017', ' SALOON/4 doors', '2008', '730 d', 'xDrive FOURWD', 'AUTOMATIC Steptronic', 70000, 4),
.......
]>
但事實並非如此。
當我在查詢中使用
values_list('make', 'model')
,而不是
values_list('make', 'model', 'first_registration', 'body', 'facelift', 'engine', 'drive','transmission', 'mileage')
然後我得到正確的結果:
<QuerySet [
('Audi', 'A3', 7),
('Audi', 'A4', 6),
('BMW', 'M3', 6),
....
]>
正確的結果是:
<QuerySet [
('Audi', 'A3', 7),
('Audi', 'A4', 6),
('BMW', 'M3', 6),
....
]>
但在這個結果我只得到make, model and number of calculations
但我需要所有這些值:'make', 'model', 'first_registration', 'body', 'facelift', 'engine', 'drive','transmission', 'mileage'
,這就是爲什麼我試圖用:
calculations_list = Calculations.objects.values_list('make', 'model', 'first_registration', 'body', 'facelift', 'engine', 'drive','transmission', 'mileage')
.distinct()
.annotate(num_calculations=Count('make'))
.order_by('-num_calculations')[:10]
我該怎麼辦錯了嗎?
我不明白你的問題。第一個結果有什麼問題?如果第二個代碼給你正確的結果,你爲什麼不使用它? –
@DanielRoseman因爲我需要所有這些價值觀,而不僅僅是「製造和模型」。第一個查詢的問題是它給出了錯誤的結果。 – Boky
但是什麼是正確的結果? –