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] 
> <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 <[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] <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/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].
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/0e1140b5-5971-43d3-8a9f-0e81c3fa8a4c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to