Я не могу сделать запрос в django, чтобы отфильтровать сообщения от тех пользователей, за которыми следит текущий зарегистрированный пользователь
Я работаю над проектом Django, в котором пользователь может следить за другими пользователями, создавать посты и так далее, как в Twitter или Instagram. Однако у меня возникла проблема с написанием запросов в views.py, чтобы отфильтровать все посты от людей, за которыми в данный момент следит зарегистрированный пользователь. Здесь я делюсь своей функцией views.py, моделью, шаблоном и соответствующей ER-диаграммой.
views.py
def followerspost(request):
user = request.user
profile = Profile.objects.filter(user = user)
followings = user.profile.followings.all()
for following in followings:
posts = NewPost.objects.filter(user = following)
return render(request,"network/following.html",{
"user" : user,
"profile" : profile,
"followings" : followings,
"posts" : posts,
})
models.py
class NewPost(models.Model):
user = models.ForeignKey(User, on_delete = models.CASCADE)
post = models.TextField()
timestamp = models.DateTimeField(auto_now_add = True)
def __str__(self):
return f"{self.post}"
class Profile(models.Model):
user = models.OneToOneField(User, on_delete = models.CASCADE)
picture = models.ImageField(blank=True,null=True,upload_to="images/")
followers = models.ManyToManyField(User, blank=True, related_name="followers")
followings = models.ManyToManyField(User,blank = True, related_name="followings")
Я спроектировал свою базу данных в соответствии со следующей ER-диаграммой.
urls.py
urlpatterns = [
path("profile/<int:id>/following/addfollower",views.followersPeople,name="addfollower"),
path("profile/<int:id>/following/removefollower",views.followersRemove,name="removefollower"),
path("following",views.followerspost,name="following"),]+ static(settings.MEDIA_URL, document_root= settings.MEDIA_ROOT)
following.html
<h1>All Posts</h1>
<div id="posts" class="card">
<div class="card-body">
{% for posts in posts %}
<ul>
<li class="card">
<div class="card-body">
<h5 class="card-title"><a style="text-decoration: none;" href="{% url 'profile' posts.user.id %}">{{ posts.user }}</a></h5>
<h6 class="card-subtitle text-muted">{{ posts.timestamp }}</h6>
<h3 class="card-text">{{ posts.post }}</h3>
</div>
</li>
</ul>
{% empty %}
<h6>No post availabel 😔</h6>
{% endfor %}
</div>
</div>
Но когда я посещаю файл following.html, он отображает сообщения только одного пользователя (за которым следует текущий пользователь, вошедший в систему) и не отображает никаких сообщений от других пользователей. Что мне теперь делать?
попробуйте это
def followerspost(request):
user = request.user
profile = Profile.objects.filter(user = user)
followings = user.profile.followings.all()
posts = NewPost.objects.filter(user__in= followings) #new
return render(request,"network/following.html",{
"user" : user,
"profile" : profile,
"followings" : followings,
"posts" : posts,
})
for following in followings:
posts = NewPost.objects.filter(user = following)
это присваивает значение переменной posts каждый раз, поэтому вы получите только последние следующие сообщения.
просто сделайте что-то вроде этого и удалите цикл
posts = NewPost.objects.filter(user__in = followings)