Как сделать социальную сеть похожей на первую страницу в 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>
Я думаю, что это то, что вам нужно. Надеюсь, это решит вашу проблему.