1

我有:

class Profile(models.Model):
    user = models.OneToOneField(User)
    birthday = models.DateField(null=True)
    gender = models.CharField(max_length=140)  
    profile_picture = models.URLField()

class Follow(models.Model):
    follower = models.ForeignKey(User, related_name="who_follows")
    followed = models.ForeignKey(User, related_name="who_is_followed")
    follow_time = DateTimeField(auto_now=True)

那么ProfileResource 应该是什么才能获得followers_count 呢?或者我可以发布该用户有新的关注者吗?

我的 ProfileResource 是:

class ProfileResource(ModelResource):
    followers_count = Follow.objects.filter(followed=)
    class Meta:
        queryset = User.objects.all()
        resource_name = 'profile'
        filtering = {
            'username': ALL,
        }

这是最好的方法吗?或者我应该像这样使用它:

class Profile(models.Model):
    user = models.OneToOneField(User)
    birthday = models.DateField(null=True)
    gender = models.CharField(max_length=140)  
    profile_picture = models.URLField()
    followers = ToManyField('self')
    following = ToManyField('self')
4

2 回答 2

1

您应该能够通过属性获得关注者的数量。尝试类似:

class Profile(models.Model):
    ...
    def followers_count(self):
        return self.user.who_is_followed.all().count()

class ProfileResource(ModelResource):
    followers_count = fields.CharField(attribute='followers_count')
    ...
于 2012-08-01T07:47:52.763 回答
0

您应该能够在查询集中注释关注者的计数,以便您可以在一个数据库调用中完成它:

queryset = User.objects.annotate(number_of_followers=Count('follow'))
于 2012-08-01T08:10:17.933 回答