2

間接的に関連する 2 つのテーブルがPostsあります。Follower_to_followee

models.py:

class Post(models.Model):

    auth_user = models.ForeignKey(User, null=True, blank=True, verbose_name='Author', help_text="Author")

    title = models.CharField(blank=True, max_length=255, help_text="Post Title")

    post_content = models.TextField (help_text="Post Content")

class Follower_to_followee(models.Model):

    follower = models.ForeignKey(User, related_name='user_followers', null=True, blank=True, help_text="Follower")

    followee = models.ForeignKey(User, related_name='user_followees', null=True, blank=True, help_text="Followee")

folowee は、posts 内の post auth_user (投稿者) に間接的に関連しています。ただし、これは Django の user テーブルに直接関連しており、user テーブルは post テーブルに直接関連しています。

ユーザー テーブルを使用せずに、特定のフォロワーのすべてのフォロワーを選択し、各フォロワーの投稿数をクエリの結果に含めるにはどうすればよいですか? 実際、この時点では、ユーザー テーブルを使用してそれを行う方法さえ明確ではありません。助けてください。

4

4 に答える 4

1

単一のSQLを生成するクエリを作成することは可能です。

qs = User.objects.filter(user_followees__follower=specific_follower).annotate(
         post_count=models.Count('post'))
for u in qs:
    print u, u.post_count

https://stackoverflow.com/a/13293460/165603の2番目の部分を確認してください(追加のM2Mマネージャーを除いて同様に機能します)

の内部User.objects.filterで使用すると、user_followees__follower=fooとはモデルuser_followers__followee=fooのテーブルの結合とまたはの条件チェックを引き起こします(または上記とは異なる動作をすることに 注意してください。DjangoORMはそれらをスマートに単純化し、のようなものを生成します)。Follower_to_followeewherefollower=foofollowee=foo
user_followees__followee=foouser_followerers__follower=fooUser.objects.filter(pk=foo.pk)

于 2013-02-13T14:28:54.570 に答える
0

ビュー.py

def view_name(request):
    followers = Follower_to_followee.objects.filter(user=request.user)
    .......

html

{{user}}<br/>

My followers:<br/>    
{% follower in followers %}
    <p>{{follower}} - {{follower.user.follower_to_followee_set.count}}</p>
{% endfor %}
于 2013-02-13T10:27:00.763 に答える
0

投稿数を取得するには、これを使用できます。

#get follower
follower = User.objects.get(username='username_of_fallower')
#get all followees for a specific follower
for element in Follower_to_followee.objects.filter(follower=follower):
    element.followee.post_set.all().count()
于 2013-02-13T08:47:46.077 に答える
0

質問を理解しているかどうかは完全にはわかりませんが、簡単な解決策を次に示します。これはもっと簡潔に書くこともできますが、各ステップを確認できるように分割しました。

特定のフォロワーのすべてのフォロワーを選択するにはどうすればよいですか?

# First grab all the follower_to_followee entries for a given 
# follower called: the_follower
follows = Follower_to_followee.objects.filter(follower=the_follower)

followee_counts = []

# Next, let's iterate through those objects and pick out 
# the followees and their posts
for follow in follows:
    followee = follow.followee

    # post for each followee
    followee_posts = Post.objects.filter(auth_user=followee).count()

    # Count number of posts in the queryset
    count = followee_posts.count()

    # Add followee/post_counts to our list of followee_counts
    followee_counts.append((followee, count))

# followee_counts is now a list of followee/post_count tuples
于 2013-02-13T08:18:39.940 に答える