Django добавить лайк пользователю запись в блоге [закрыто]

Я совсем новичок в django и пытаюсь сделать блог на django, но не могу понять, как добавить несколько ключевых функций.

  1. Как я могу сделать мой код, чтобы другие люди тоже могли делать записи в блоге?
  2. Как добавить кнопку "нравится/не нравится" со счетчиком на все созданные посты в блоге?
  3. Как добавить возможность добавлять картинки к постам, чтобы они отображались на первой странице и не нужно было кликать на пост, чтобы их увидеть?
  4. Буду очень признателен, если кто-нибудь поможет мне с этим, так как я не совсем уверен, как это сделать. Код приведен ниже:

    Вот мой код: ПапкаAPP views.py

    from django.shortcuts import render, get_object_or_404
    from django.views import generic
    from .models import Post
    from .forms import CommentForm
    
    
    class PostList(generic.ListView):
        queryset = Post.objects.filter(status=1).order_by('-created_on')
        template_name = 'index.html'
        paginate_by = 6
    
    
    def post_detail(request, slug):
        template_name = 'post_detail.html'
        post = get_object_or_404(Post, slug=slug)
        comments = post.comments.filter(active=True)
        new_comment = None
        # Comment posted
        if request.method == 'POST':
            comment_form = CommentForm(data=request.POST)
            if comment_form.is_valid():
    
                # Create Comment object but don't save to database yet
                new_comment = comment_form.save(commit=False)
                # Assign the current post to the comment
                new_comment.post = post
                # Save the comment to the database
                new_comment.save()
        else:
            comment_form = CommentForm()
    
        return render(request, template_name, {'post': post,
                                               'comments': comments,
                                               'new_comment': new_comment,
                                               'comment_form': comment_form})
    

    ПапкаAPP urls.py

    from . import views
    from django.urls import path
    
    urlpatterns = [
        path('', views.PostList.as_view(), name='home'),
        path("<slug:slug>/", views.post_detail, name="post_detail"),
    

    ]

    папкаAPP models.py

    from django.db import models
    from django.contrib.auth.models import User
    from cloudinary.models import CloudinaryField
    
    
    STATUS = (
        (0,"Draft"),
        (1,"Publish")
    )
    
    class Post(models.Model):
        title = models.CharField(max_length=200, unique=True)
        slug = models.SlugField(max_length=200, unique=True)
        author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
        updated_on = models.DateTimeField(auto_now=True)
        content = models.TextField()
        created_on = models.DateTimeField(auto_now_add=True)
        status = models.IntegerField(choices=STATUS, default=0)
    
        class Meta:
            ordering = ['-created_on']
    
        def __str__(self):
            return self.title
    
    
    class Comment(models.Model):
        post = models.ForeignKey(Post,on_delete=models.CASCADE,related_name='comments')
        name = models.CharField(max_length=80)
        email = models.EmailField()
        body = models.TextField()
        created_on = models.DateTimeField(auto_now_add=True)
        active = models.BooleanField(default=False)
    
        class Meta:
            ordering = ['created_on']
    
        def __str__(self):
            return 'Comment {} by {}'.format(self.body, self.name)
    

    ПапкаAPP forms.py

    from django import forms
    from .models import Comment
    
    
    class CommentForm(forms.ModelForm):
        class Meta:
            model = Comment
            fields = ("name", "email", "body")
    

    папкаAPP admins.py

    from django.contrib import admin
    from django_summernote.admin import SummernoteModelAdmin
    from .models import Post, Comment
    
    
    @admin.register(Comment)
    class CommentAdmin(admin.ModelAdmin):
        list_display = ('name', 'body', 'post', 'created_on', 'active')
        list_filter = ('active', 'created_on')
        search_fields = ('name', 'email', 'body')
        actions = ['approve_comments']
    
        def approve_comments(self, request, queryset):
            queryset.update(active=True)
    
    class PostAdmin(admin.ModelAdmin):
        list_display = ('title', 'slug', 'status','created_on')
        list_filter = ("status",)
        search_fields = ['title', 'content']
        prepopulated_fields = {'slug': ('title',)}
    
    class PostAdmin(SummernoteModelAdmin):
        summernote_fields = ('content',)
    
    admin.site.register(Post, PostAdmin)
    
    **newsblog Folder**
    **urls.py**
    
    from django.contrib import admin
    from django.urls import path, include
    from django.conf import settings
    from django.conf.urls.static import static
    
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', include('newsapp.urls')),
        path('summernote/', include('django_summernote.urls')),
    ]
    if settings.DEBUG:
        urlpatterns += static(settings.MEDIA_URL,
                              document_root=settings.MEDIA_ROOT)
    

    папка newsblog settings.py

    папка шаблонов Htmlfiles base.html

    папка шаблонов Htmlfiles index.html

    {% extends "base.html" %}
    {% block content %}
    <style>
        body {
            font-family: "Roboto", sans-serif;
            font-size: 18px;
            background-color: #fdfdfd;
        }
    
        .head_text {
            color: white;
        }
    
        .card {
            box-shadow: 0 16px 48px #E3E7EB;
        }
    </style>
    
    <header class="masthead">
        <div class="overlay"></div>
        <div class="container">
            <div class="row">
                <div class=" col-md-8 col-md-10 mx-auto">
                    <div class="site-heading">
                        <h3 class=" site-heading my-4 mt-3 text-white"> NewsBlog and Automated news with API</h3>
                        <p class="text-light">We Love Django As much as you do..! &nbsp
                        </p>
                    </div>
                </div>
            </div>
        </div>
    </header>
    <div class="container">
        <div class="row">
            <!-- Blog Entries Column -->
            <div class="col-md-8 mt-3 left">
                {% for post in post_list %}
                <div class="card mb-4">
                    <div class="card-body">
                        <h2 class="card-title">{{ post.title }}</h2>
                        <p class="card-text text-muted h6">{{ post.author }} | {{ post.created_on}} </p>
                        <p class="card-text">{{post.content|slice:":200" }}</p>
                        <a href="{% url 'post_detail' post.slug  %}" class="btn btn-primary">Read More &rarr;</a>
                    </div>
                </div>
                {% endfor %}
            </div>
            {% block sidebar %} {% include 'sidebar.html' %} {% endblock sidebar %}
        </div>
    </div>
    {%endblock%}
    

    папка шаблонов Htmlfiles post_detail.html

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