Это то, что я попробовал: < /p>
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,blank=True,null=True)
profile_pic = models.ImageField(upload_to='UploadedProfilePicture/', default="ProfileAvatar/avatar.png", blank=True)
following = models.ManyToManyField(
'Profile', # Refers to the User model itself
symmetrical=False, # If A follows B, B doesn't automatically follow A
related_name='followers', # Reverse relationship: get followers of a user
blank=True,
)
class Post(models.Model):
poster_profile = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE, blank=True,null=True)
def following_view(request):
posts = Post.objects.filter(
Q(poster_profile__profile__followers__user=request.user)).order_by("?").distinct()
mymutual_followers = request.user.profile.following.filter(id__in=request.user.profile.following.values_list('id', flat=True))
{% for post in posts %}
{% for user_following in mymutual_followers %}
{% if user_following in post.poster_profile.profile.following.all|slice:"3" %}
{% endif %}
{% endfor %}
{% endfor %}
< /code>
Приведенный выше код - это то, что я попробовал, и он работал, но добавьте срез: «3», чтобы показать, что только 3 изображения не работают должным образом для некоторых пользователей, поэтому я думаю, что, возможно, это не лучший подход. Как это сделать? < /p>
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,blank=True,null=True)
profile_pic = models.ImageField(upload_to='UploadedProfilePicture/', default="ProfileAvatar/avatar.png", blank=True)
following = models.ManyToManyField(
'Profile', # Refers to the User model itself
symmetrical=False, # If A follows B, B doesn't automatically follow A
related_name='followers', # Reverse relationship: get followers of a user
blank=True,
)
class Post(models.Model):
poster_profile = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE, blank=True,null=True)
def following_view(request):
posts = (
Post.objects.filter(Q(poster_profile__profile__followers__user=request.user)).order_by("?")
.annotate(
mutual_count=Count(
'poster_profile', filter=Q(poster_profile__profile__following__followers__user=request.user)
) # Got the count for mutual followers
)
.prefetch_related( # what am I doing wrong here....
Prefetch(
'poster_profile',
Post.objects.annotate(
is_mutual=Exists(
Post.objects.filter(
poster_profile=OuterRef('pk'),
poster_profile__profile__followers__user=request.user,
)
)
).filter(is_mutual=True),
to_attr='mutual_followers',
)
)
)
# Template
{% for post in posts %}
{{ post.mutual_count }} # Got mutual count
{% endfor %}
# This is not displaying images.
{% for post in posts %}
{% for img in post.mutual_followers %}
{% endfor %}
{% endfor %}
Подробнее здесь: https://stackoverflow.com/questions/796 ... ers-django