Разработка лайков на Django

122
24 декабря 2020, 03:20

Итак, всем привет, возникли сложности в разработке системы лайков, видимо что-то недопонимаю. Вот моя модель постов.

class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, 
                               on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    image = models.ImageField(upload_to=upload_location,
                          null=True, blank=True,
                          height_field="height_field",
                          width_field="width_field")
    height_field = models.IntegerField(default=0)
    width_field = models.IntegerField(default=0)
    text = models.TextField()
    like = models.ManyToManyField(User, related_name="like")
    likes = models.IntegerField(default=0, verbose_name="Likes")
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)
    def publish(self):
        self.published_date = timezone.now()
        self.save()
    def __str__(self):
        return self.title

Сама проблема, как я понял кроется в передаче данных и во въюшке.

@login_required
def post_like(request, add_id, pk):
    if request.method == "POST":
        if request.is_authenticated:
            post_item = Post.objects.get(id=add_id)
            user_item = User.filter.get(like=add_id)
            current_user = request.user
            if current_user not in user_item:
                try:
                    post_item.likes += 1
                    post_item.like.add(current_user)
                    post_item.save()
                    return redirect('post_detail', pk=pk)
                except ObjectDoesNotExist:
                    return redirect('post_detail', pk=pk)
            else:
                return redirect('post_detail', pk=pk)
        else:
            return redirect('post_detail', pk=pk)

Как мне отловить данные, которые передаю? По пост запросу? Тогда придется вставлять форму, а без формы никак? Подскажите в плане веба, как реализовать, может я чего то не знаю. Вот сам шаблон

<div class="post">
    <h1>{{ post.title }}</h1>
    <p>{{ post.text|linebreaksbr }}</p>
    {% if post.image %}
        <img src="{{post.image.url}}" class="img-responsive">
    {% endif %}
    <div class="date">
    {{ post.published_date }}
        <p>Author: {{ post.author }}</p>
        <form method="post">
            <a class="glyphicon glyphicon-thumbs-up" href="{{ url 'post_like' add_id=request.user.id pk=post.pk}}"></a>
            <span>{{post.likes}}</span>
        </form>
    </div>

Мой url.py

urlpatterns = [
path('', views.post_list, name='post_list'),
path('post/<int:pk>/', views.post_detail, name='post_detail'),
path('post/new', views.post_new, name='post_new'),
path('post/<int:pk>/edit', views.post_edit, name='post_edit'),
path('drafts/', views.post_draft_list, name='post_draft_list'),
path('post/<pk>/publish', views.post_publish, name='post_publish'),
path('post/<pk>/remove', views.post_remove, name='post_remove'),
path('post/<int:pk>/comment', views.add_comment_to_post, 
     name='add_comment_to_post'),
path('post/<int:pk>/<int:id>/remove_comment', views.remove_comment, 
     name='remove_comment'),
path('post/<int:pk>/<int:id>/edit_comment', views.edit_comment, 
     name='edit_comment'),
path('post/my_posts/', views.my_posts, name='my_posts'),
path('post/<pk>/<add_id>', views.post_like, name='post_like')
]
READ ALSO
JQuery div onChange внутри &lt;a href

JQuery div onChange внутри <a href

Я пытаюсь добавить событие click на div, который находится внутри a, Я не хочу, чтобы событие a href срабатывало при запуске события щелчка

133
WPF не работает Binding на FontSize внутри DataTemplate

WPF не работает Binding на FontSize внутри DataTemplate

Здравствуйте! Программа написанна на WPF MVVM с использованием фреймворка caliburn MicroВозникла необходимость динамически менять размер шрифта...

118
Отложенный запуск программ C#

Отложенный запуск программ C#

Как можно после завершения основной программы запустить файл батник который создался при завершении программы, я сделал через процесс старт...

110
Разбиение команд на 6 групп по 4 в каждой

Разбиение команд на 6 групп по 4 в каждой

Пытался сделать, но ввиду while, долго думает программа и вообще наверное способ мой плохой

91