我有一个模型结构,可以跟踪用户的关注者和关注者。
class Connections(models.Model):
following = models.ForeignKey(
User, related_name='following'
)
followers = models.ForeignKey(
User, related_name='followers'
)
class Meta:
unique_together = (('following', 'followers'), )
class Post(models.Model):
body = models.TextField()
user = models.ForeignKey(User)
#media = models.ForeignKey(postMedia)
post_image = models.ImageField(upload_to=get_postimage_path)
type_of_post = models.CharField(max_length=20)
def __unicode__(self):
return u'%s, %s' % (self.user.username, self.body)
class Sharedpost(models.Model):
post = models.ForeignKey(post, unique=True)
date = models.DateTimeField(auto_now_add=True)
favors = models.IntegerField(default=1)
users_favored = models.ManyToManyField(User, related_name='users_favored')
notify_users = models.ManyToManyField(User, related_name='notify_users')
def __unicode__(self):
return u'%s, %s, %s' % (self.post.user.username, self.post.body, self.pk)
现在,如果我必须为用户提取以下内容,我会在我的视图中执行类似的操作
following = [connections.followers for connections in user.following.all()]
现在我正在尝试使用Tasypie为我的Web应用程序设计API,我不知道如何在我的ModelResources中表示这种关系。
我想生成一个关注者列表并在其中跟随,然后将其用作我的过滤器,以提取用户所关注的所有帖子。
curl http://localhost:8000/api/v1/sharedpost/?post__user__username=abc
我正在使用这个来过滤掉特定用户发布的所有帖子,但我想为所有以下用户提供过滤器。
我可以使用
def get_object_list(self, request):
return super(SharedPostResource, self).get_object_list(request).filter(post__user=request.user)
然后
def get_object_list(self, request):
user=request.user
following = [connections.followers for connections in user.following.all()]
return super(SharedPostResource,self).get_object_list(request).filter(post__user__in=following).order_by('-date')
但是我不能为所有这些制作不同的资源吗? 还有比这更好的方法吗?也许我可以让一个资源更加多样化?