Ich versuche, die 10 Autos mit den meisten Berechnungen auf ihnen in Django zu bekommen.Gesamtberechnungen von der Django-Datenbank erhalten
Calculations
Modell ist wie folgt:
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)
Abfrage, die ich wie folgt:
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]
Diese Abfrage gibt mir:
<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),
.......
]>
Aber das ist nicht wahr, .
Wenn ich in der Abfrage verwenden
values_list('make', 'model')
statt
values_list('make', 'model', 'first_registration', 'body', 'facelift', 'engine', 'drive','transmission', 'mileage')
dann bekomme ich das richtige Ergebnis:
<QuerySet [
('Audi', 'A3', 7),
('Audi', 'A4', 6),
('BMW', 'M3', 6),
....
]>
Das richtige Ergebnis ist:
<QuerySet [
('Audi', 'A3', 7),
('Audi', 'A4', 6),
('BMW', 'M3', 6),
....
]>
Aber in diesem Ergebnis komme ich nur make, model and number of calculations
aber ich brauche all diese Werte: 'make', 'model', 'first_registration', 'body', 'facelift', 'engine', 'drive','transmission', 'mileage'
und deshalb habe ich zu verwenden versucht:
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]
Was kann ich tun, falsch?
Ich verstehe Ihre Frage nicht. Was stimmt nicht mit dem ersten Ergebnis? Und wenn der zweite Code Ihnen das richtige Ergebnis gibt, warum verwenden Sie das nicht? –
@DanielRoseman Weil ich all diese Werte brauche, nicht nur 'make and model'. Und das Problem mit der ersten Abfrage ist, dass es das falsche Ergebnis liefert. – Boky
Aber was ist das richtige Ergebnis ?. –