2016-04-03 38 views
0

modelinde alanların Agrega eşit değerler: eğer öyleyse ben object_raw maçları tüm girişleri, toplamak istediğiniziDjango - temelde bu gibi yapılandırılmış ben kullanıcı faaliyetleri için etkinlik günlükleri var

class ActivityLog(TimeStampedModel): 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    action_type = models.CharField(max_length=25) 
    object_raw = models.CharField(max_length=500) 

yani bir kullanıcının aradığı 4 farklı vesileyle 'foo', sayım = 4 ile 'foo' için bir giriş yapalım. Bunu şu anda yapmakta zorlanıyorum. Bunu sql'de nasıl yapacağımı biliyorum ama django sözdizimini anlamıyorum. Dokümanları okuyorum ama hala anlamadım. Herhangi biri yardımcı olabilirse, çok takdir edilecektir!

cevap

0

'foo' ile bir nesneyi almak için ve object_raw='foo' kaç nesneleri yapabilirsiniz adres: sadece object_raw='foo' kullanabileceğiniz kaç nesneleri istiyorsanız

activity_logs = ActivityLog.objects.filter(object_raw='foo') 
if activity_logs.exists(): 
    activity_logs.first() # get one object 
    activity_logs.count() # get number of objects 

conditional expressionsaggregates ile:

from django.db.models import IntegerField, Sum 
Client.objects.aggregate(
    num_object_raw=Sum(
     Case(
      When(object_raw='foo', then=1), 
      output_field=IntegerField() 
     ) 
    ) 
)