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 <[email protected] > <javascript:>> 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 <[email protected]> >>> 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('hitcounts__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 <[email protected]> wrote: >>>>> >>>>>> Hello Todor, >>>>>> >>>>>> I followed your directions and used >>>>>> https://docs.djangoproject.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 [email protected]. >>>>>> To post to this group, send email to [email protected]. >>>>>> 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 [email protected]. >>>> To post to this group, send email to [email protected]. >>>> 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 [email protected] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> 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/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 [email protected]. To post to this group, send email to [email protected]. 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. For more options, visit https://groups.google.com/d/optout.

