Как сделать социальную сеть похожей на первую страницу в django

Я пытаюсь сделать socialmedia, я сделал систему профилей, где пользователь может загрузить свой соответствующий пост, но я хочу сделать первую страницу как в социальных сетях (если кто-то из моих последователей загрузил пост, я хочу видеть его на моей первой странице).У меня есть система последователей и фолловеров.

models.py

class Profile(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE)
    date_of_birth=models.DateField(blank=True,null=True)
    photo=models.ImageField(default='default.jpg',upload_to='profile_pic')
    followers=models.ManyToManyField(User,related_name='followers',blank=True)
    following=models.ManyToManyField(User,related_name='following',blank=True)
    def __str__(self):
        return f'{self.user.username},{self.photo}'

class Image(models.Model):
    user=models.ForeignKey(User,on_delete=models.CASCADE,related_name='images_created')
    image=models.ImageField(upload_to='images/%d/%m/%y/')
    description=models.TextField(blank=True)
    created=models.DateField(auto_now_add=True,db_index=True)
    users_like=models.ManyToManyField(User,related_name='images_like',blank=True)
    def __str__(self):
        return f'{self.image},{self.description}'

views.py

urls.py

urlpatterns=[
    path('login/',views.user_login,name='login'),
    path('logout/',views.user_logout,name='logout'),
    path('dashboard/',views.dashboard,name='dashboard'),
    path('password_change/',auth_views.PasswordChangeView.as_view(template_name='registration/password_change.html'),name='password_change'),
    path('password_change/done/',auth_views.PasswordChangeDoneView.as_view(template_name='registration/change_password_done.html'),name='password_change_done'),
    path('password_reset/',auth_views.PasswordResetView.as_view(template_name='registration/password_reset.html'),name='password_reset'),
    path('password_reset/done/',auth_views.PasswordResetDoneView.as_view(template_name='registration/reset_password_done.html'),name='password_reset_done'),
    path('reset/<uidb64>/<token>/',auth_views.PasswordResetConfirmView.as_view(template_name='registration/reset_password_confirm.html'),name='password_reset_confirm'),
    path('reset/done/',auth_views.PasswordResetCompleteView.as_view(template_name='registration/reset_password_complete.html'),name='password_reset_complete'),
    path('create_account/',views.UserRegistration,name='create_account'),
    path('register_done/',views.registerdone,name="register_done"),
    path('profile/<str:username>/',views.user_profile,name='profile'),
    path('edit/',views.editprofile,name='edit'),
    path('images/',views.imageview,name='images'),
    path('search/',views.search,name='search'),
    path('follow/<str:id>/<str:username>/',views.follow,name='follow'),
    path('unfollow/<str:id>/<str:username>/',views.unfollow,name='unfollow'),

    ]

Что вы можете сделать, так это создать вид homePage, вывести шаблон, и из вида вывести сообщения, сделанные вашими последователями, и показать их через for loop или использовать пагинацию для этого, если есть много сообщений .

Простой бит кода :

views.py

def homePage(request):
    user = request.user
    following_user = user.following.all()
    followed_by_user = user.followers.all()
    the_posts = []
    the_posts+=list(following_user.post_set.all()))
    the_posts+= list(followed_by_user.post_set.all()))
    context = {"posts" : the_posts}
    return render(request, "app/homePage.html" , context = context)

Просто перейдите на домашнюю страницу homePage.html

<html>
<body>
{% for post in posts %}
{{post.username}}
{{post.image}}
...
<!-- What ever fields you want -->
{% endfor %}

</body>
</html>

Я думаю, что это то, что вам нужно. Надеюсь, это решит вашу проблему.

Вернуться на верх