Django bir gıda günlük veritabanı inşa ediyorum ilgili bir modelde açıklamalı Kont() göre sıralamak ve ben bir sorgu ile ilgili sorun var nasıl.Django
I (diğer şeylerin yanı sıra) dahil etmek Tüketim modeli üzerinden bir M2M-alanı "tüketici" aracılığıyla kullanıcı modeli bağlı bir Gıda modeli Modellerimi kurdum. Gıda modeli, yiyecek tabaklarını tanımlar ve Tüketim modeli, kullanıcının Gıda tüketimini (tarih, miktar, vb.) Açıklar.
class Food(models.Model):
food_name = models.CharField(max_length=30)
consumer = models.ManyToManyField("User", through=Consumption)
class Consumption(models.Model):
food = models.ForeignKey("Food")
user = models.ForeignKey("User")
Ben Gıda nesne o kullanıcı (kullanıcı gıda tükettiği sayısı) için tüketimle tabloda görünme sayısına göre sipariş edilen tüm gıda nesnelerini döndüren bir sorgu oluşturmak istiyorum.
ben hattında şey çalışıyorum:
Food.objects.all().annotate(consumption_times = Count(consumer)).order_by('consumption_times')`
Ama tabii bu irade kullanıcıyla ilişkili değil, sadece olanları, Gıda nesnesine ilgili tüm Tüketim nesneleri sayar. Modellerimi değiştirmem mi gerekiyor yoksa sadece sorgularda belirgin bir şey eksik miyim?
Bu oldukça zaman açısından kritik bir işlemdir (diğer şeylerin yanı sıra, Frontend'deki Otomatik Tamamlama alanını doldurmak için kullanılır) ve Yemek tablosunda birkaç bin giriş vardır, bu nedenle veritabanında sıralama yapmayı tercih ederim sonunda, kaba kuvvet yöntemini yapıyor ve yapmaya sonuçları üzerinde yineleme yerine:
Consumption.objects.filter(food=food, user=user).count()
ve sonra bunları sıralamak piton sıralama kullanarak. Bu yöntemin kullanıcı tabanı arttıkça çok iyi bir şekilde ölçekleneceğini düşünmüyorum ve veritabanını en başından itibaren gelecekteki kanıt olarak tasarlamak istiyorum.
Herhangi bir fikrin var mı?
Olası yinelenen [ForeignKey alanın sayımı ile Order?] (Http://stackoverflow.com/questions/2501149/order-by-count-of-a-foreignkey-field) –