Todor, You have access to my complete repo but still I will post answer here for others to learn.
Regards, Mudassar On Fri, Aug 5, 2016 at 6:06 AM, Todor Velichkov <todorvelichko...@gmail.com> wrote: > Honestly, now Idea why you get this error, can you paste some more code? > And maybe some stack trace? > > On Friday, August 5, 2016 at 2:20:25 PM UTC+3, M Hashmi wrote: >> >> 1.8.13 as its LTS. >> >> On Fri, Aug 5, 2016 at 3:54 AM, Todor Velichkov <todorvel...@gmail.com> >> wrote: >> >>> Whats your Django version? >>> >>> On Friday, August 5, 2016 at 1:42:48 PM UTC+3, M Hashmi wrote: >>>> >>>> I did the same thing while working with the contenttype except I did >>>> used default filters .all(), .filter(), .get(), annotations and >>>> aggregations etc. Todor each product shows multiple hits if I log out and >>>> hit it and login back to hit it shows more than one hits. Hits are being >>>> recoreded for each session. It shows the same error as it is showing now >>>> after implementing GenericRelations: >>>> >>>> AttributeError at / 'GenericForeignKey' object has not attribute >>>> 'get_lookup'. >>>> >>>> If I mix it with .aggregate(Max, Count, Avg or Sum) queryset options it >>>> will pop up "unhashable type". >>>> >>>> I am working on joins methods in django with hope that it will make it >>>> work. I really appreciate your help guys. You both rock and I've learned a >>>> lot with your directions. Still if you have ideas please let me know I will >>>> try those too. >>>> >>>> Regards, >>>> Mudassar >>>> >>>> On Fri, Aug 5, 2016 at 1:04 AM, Todor Velichkov <todorvel...@gmail.com> >>>> wrote: >>>> >>>>> Constantine Covtushenko, >>>>> >>>>> HitCount is a model from a 3rd party app, so the OP can't change it. >>>>> >>>>> However the way HitCount is implemented I don't think one there is a >>>>> way for one product to have more than one `HitCount` objects. >>>>> So I don't think any aggregations are needed. >>>>> >>>>> Lets the Product class look like this: >>>>> >>>>> class Product(models.Model): >>>>> #im changing this on purpose, because it points to HitCount class. >>>>> hitcounts = GenericRelation(HitCount, content_type_field= >>>>> 'content_object', object_id_field='object_pk',) >>>>> >>>>> Now `HitCount` has a separate `Hit` class which hold all individual >>>>> hits for a `product`. >>>>> >>>>> The app model structure is here. >>>>> <https://github.com/thornomad/django-hitcount/blob/master/hitcount/models.py> >>>>> >>>>> So to get top products by overall hits you can use `HitCount.hits` >>>>> field, without any `aggregations`, `annotations` or whatsoever. >>>>> >>>>> top_products_by_total_hits = Product.objects.order_by('hitc >>>>> ounts__hits')[:6] >>>>> >>>>> Now if you want to get the number of hits for a product for some >>>>> period of range (lets say a week). Then we need to use the `Hit` >>>>> model. >>>>> >>>>> top_products_by_last_week_hits = Product.objects.filter( >>>>> hitcounts__hit__created__gte=today-timedelta(days=7) >>>>> ).annotate( >>>>> last_week_hits=Count('hitcounts__hit') >>>>> ).order_by('-last_week_hits')[:6] >>>>> >>>>> Hope this helps and things get clear now. >>>>> >>>>> On Friday, August 5, 2016 at 8:44:02 AM UTC+3, Constantine Covtushenko >>>>> wrote: >>>>>> >>>>>> Hi M Hashmi, >>>>>> >>>>>> I believe that you are looking a way to use aggregation on related >>>>>> model. >>>>>> You should try the following snitppet: >>>>>> `trending_products = Product.objects.aggregate(hit=Max( >>>>>> 'hits__hits'))[:6]` (see more info here >>>>>> <https://docs.djangoproject.com/en/1.9/topics/db/aggregation/>) >>>>>> >>>>>> This will give you list of products where each product will have >>>>>> 'hit' is the MAX value of all hits set for this product. >>>>>> >>>>>> Also I do not see any reason to use 'ContentType' relation from your >>>>>> HitCount model at all. >>>>>> If your origin intent was to have hits with any Model in your >>>>>> system(project) then you should built 'joins with aggregation' queries >>>>>> based on Reverse Generic Relation as said Todor. But in this case Product >>>>>> hits field becomes unnecessary as it duplicates relations. >>>>>> >>>>>> On Fri, Aug 5, 2016 at 5:59 AM, M Hashmi <mhash...@gmail.com> wrote: >>>>>> >>>>>>> Hello Todor, >>>>>>> >>>>>>> I followed your directions and used https://docs.djangoprojec >>>>>>> t.com/ja/1.9/ref/contrib/contenttypes/ for reference but I got >>>>>>> stuck at error 'GenericForeignKey' object has not attribute >>>>>>> 'get_lookup'. I >>>>>>> tried Product.objects.aggregate(Count('hits'))[:6]. In my models.py >>>>>>> I got following code: >>>>>>> >>>>>>> hits = GenericRelation(HitCount, content_type_field='content_object', >>>>>>> object_id_field='object_pk',) >>>>>>> >>>>>>> class Meta: >>>>>>> ordering = ["-title"] >>>>>>> Removed the -hits from ordering section and rest of the code is >>>>>>> same. I searched it on google but it showed some Django based bugs. >>>>>>> Any suggestions? >>>>>>> Thanks, >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Thursday, August 4, 2016 at 2:07:53 PM UTC-7, Todor Velichkov >>>>>>> wrote: >>>>>>>> >>>>>>>> My field hits=models.ForeignKey(Hitcount) means that my Product >>>>>>>>> model has a related model with multiple fields and all the products >>>>>>>>> in >>>>>>>>> Product model will have one or more hit records. Instance of Product >>>>>>>>> model >>>>>>>>> will save a hit from end user by session/ip/user etc. >>>>>>>> >>>>>>>> Honestly, I don't understand that. >>>>>>>> >>>>>>>> The HitCount class already has a GenericForeignKey, maybe you are >>>>>>>> looking for a Reverse Generic Relation >>>>>>>> <https://docs.djangoproject.com/ja/1.9/ref/contrib/contenttypes/#reverse-generic-relations> >>>>>>>> class in order to get the Hits for a product. >>>>>>>> >>>>>>>> On Thursday, August 4, 2016 at 10:42:58 PM UTC+3, M Hashmi wrote: >>>>>>>>> >>>>>>>>> My field hits=models.ForeignKey(Hitcount) means that my Product >>>>>>>>> model has a related model with multiple fields and all the products >>>>>>>>> in >>>>>>>>> Product model will have one or more hit records. Instance of Product >>>>>>>>> model >>>>>>>>> will save a hit from end user by session/ip/user etc. >>>>>>>>> >>>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "Django users" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to django-users...@googlegroups.com. >>>>>>> To post to this group, send email to django...@googlegroups.com. >>>>>>> Visit this group at https://groups.google.com/group/django-users. >>>>>>> To view this discussion on the web visit >>>>>>> https://groups.google.com/d/msgid/django-users/2a7be23a-c227 >>>>>>> -460d-89f2-d7ffd52d4123%40googlegroups.com >>>>>>> <https://groups.google.com/d/msgid/django-users/2a7be23a-c227-460d-89f2-d7ffd52d4123%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> >>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>> >>>>>> >>>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Django users" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to django-users...@googlegroups.com. >>>>> To post to this group, send email to django...@googlegroups.com. >>>>> Visit this group at https://groups.google.com/group/django-users. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/django-users/cdc4459f-0f03 >>>>> -4fcd-876e-814b25b241c0%40googlegroups.com >>>>> <https://groups.google.com/d/msgid/django-users/cdc4459f-0f03-4fcd-876e-814b25b241c0%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Django users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to django-users...@googlegroups.com. >>> To post to this group, send email to django...@googlegroups.com. >>> Visit this group at https://groups.google.com/group/django-users. >>> To view this discussion on the web visit https://groups.google.com/d/ms >>> gid/django-users/0e1140b5-5971-43d3-8a9f-0e81c3fa8a4c%40googlegroups.com >>> <https://groups.google.com/d/msgid/django-users/0e1140b5-5971-43d3-8a9f-0e81c3fa8a4c%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to django-users+unsubscr...@googlegroups.com. > To post to this group, send email to django-users@googlegroups.com. > Visit this group at https://groups.google.com/group/django-users. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/django-users/cf6710ef-cde9-48f0-b50f-b06e49cbbc2b%40googlegroups.com > <https://groups.google.com/d/msgid/django-users/cf6710ef-cde9-48f0-b50f-b06e49cbbc2b%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com. To post to this group, send email to django-users@googlegroups.com. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CANoUts6q__ckTdDv_6JVcL72-NTsG3c4TAN8ABzpgxbX%2BCCCRw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.