Monday, 9 September 2013

django union three querysets of defferent Base Models

django union three querysets of defferent Base Models

Hi i have three models Action,Post,Albums
class Action(models.Model):
actor_content_type = models.ForeignKey(ContentType,
related_name='actor')
actor_object_id = models.CharField(max_length=255)
actor = generic.GenericForeignKey('actor_content_type',
'actor_object_id')
verb = models.CharField(max_length=255)
description = models.TextField(blank=True, null=True)
target_content_type = models.ForeignKey(ContentType,
related_name='target',
blank=True, null=True)
target_object_id = models.CharField(max_length=255, blank=True,
null=True)
target = generic.GenericForeignKey('target_content_type',
'target_object_id')
action_object_content_type = models.ForeignKey(ContentType,
related_name='action_object', blank=True, null=True)
action_object_object_id = models.CharField(max_length=255,
blank=True,
null=True)
action_object =
generic.GenericForeignKey('action_object_content_type',
'action_object_object_id')
action_type = models.CharField(max_length=255, blank=True,
null=True)
timestamp = models.DateTimeField(default=now)
class Post(models.Model):
id = models.AutoField(db_column='post_id', primary_key=True)
author_content_type = models.ForeignKey(ContentType,
related_name='post_author_content_type',default=ContentType.objects.get(model='User',app_label="users").id)
author_id = models.PositiveIntegerField(default=0 ,null=True, blank=True)
author = generic.GenericForeignKey('author_content_type', 'author_id')
author_name = models.CharField(max_length=255,blank=True, null=True)
author_email = models.EmailField(max_length=255,blank=True, null=True)
verb = models.CharField(max_length=255,blank=True, null=True)#shared
comment = models.TextField()
type =models.CharField(max_length=255,blank=True, null=True)# types status
update,photo,video,link
post_to_content_type = models.ForeignKey(ContentType,
related_name='post_to_content_type', null=True, blank=True, default=None,)
post_to_target_id = models.PositiveIntegerField(default=0 ,null=True,
blank=True)
to = generic.GenericForeignKey('post_to_content_type', 'post_to_target_id')
parent = models.ForeignKey('self', null=True, blank=True, default=None,
related_name='children', verbose_name=_('Parent'))
shared_to = models.CharField(max_length=255,blank=True, null=True)
#org,cause,user timeline
timestamp = models.DateTimeField(default=now)
class Album(models.Model):
id = models.AutoField(db_column='album_id', primary_key=True)
#user = models.ForeignKey(User,blank=True, null=True)
user_content_type = models.ForeignKey(ContentType,
related_name='user_content_type',default=ContentType.objects.get(model='User',app_label="users").id)
user_id = models.PositiveIntegerField(default=0 ,null=True, blank=True)
user = generic.GenericForeignKey('user_content_type', 'user_id')
title = models.CharField(max_length=500, blank=True, default=None)
timestamp = models.DateTimeField(default=now)
And this is my query ,I need to apply limit and now i used like this
timeline_list[:20] but i want to apply limit in query
timeline_list = set()
timeline_list = timeline_list.union(
Action.objects.filter(
Q(actor_object_id=user.id,actor_content_type__pk=user_ct_id,action_type="activity")|
Q(target_object_id=user.id,target_content_type__pk=user_ct_id,verb="
tagged you in a Photo")))
timeline_list = timeline_list.union(post.objects.filter(
Q(author_id=user.id,author_content_type__pk=user_ct_id)|
Q(author_id=user.id,post_to_content_type__pk=user_ct_id)|Q(post_to_target_id=user.id)))
timeline_list =
timeline_list.union(PostShare.objects.filter(user_id=user.id,user_content_type__pk=user_ct_id))
timeline_list =
timeline_list.union(Album.objects.filter(user_id=user.id,user_content_type__pk=user_ct_id))
timeline_list = sorted(timeline_list,key=lambda item:item.timestamp,
reverse=True)

No comments:

Post a Comment