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 
> <javascript:>> 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 <mhash...@gmail.com> 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 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 <javascript:>.
>> To post to this group, send email to django...@googlegroups.com 
>> <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/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+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/0e1140b5-5971-43d3-8a9f-0e81c3fa8a4c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to