zelsky
@zelsky

Не понятний ответ при запросе Djnago?

Все вроде ок возвращает мне
[<UserLikes: UserLikes object>, <UserLikes: UserLikes object>]

Для одного пользователя в таблице с ид 3 и возвращает 1-н обекти для пользователя с ид 2.
Но когда хочу использовать типо {{all_likes.id_post}} Ничего в ответ не получаю в чем ожет бить проблема ?
current_user = int(request.user.id)
   liked_posts = UserLikes.objects.filter(user_id=current_user)

Когда так обьекти приходят.
<center>{{all_likes}} </center>

class UserLikes(models.Model):
    user_id = models.IntegerField(blank=True,default=1)
    id_post= models.IntegerField(blank=True)

+----+---------+---------+
| id | user_id | id_post |
+----+---------+---------+
| 1 | 3 | 24 |
| 2 | 3 | 25 |
| 3 | 2 | 25 |
+----+---------+---------+

Питайюсь зделать проверку.
{% if one_post.pk in all_likes.id_post %}

В табл
{% else %}

Вне табл
{% endif %}
  • Вопрос задан
  • 292 просмотра
Пригласить эксперта
Ответы на вопрос 2
@stry3
Full-stack developer
1. Пока читал вопрос, пять раз сломал язык и трижды – глаза.
2. Пожалуйста, попробуйте PHP. В Python программисты, которые не умеют грамотно писать на родном языке, не выживают. Или попробуйте сформулировать свой вопрос на любом другом (включая корейский). Уверен, Вам помогут охотнее.
3. Данный код, вероятно, будет работать вот так:
# views.py
liked_post_ids = UserLikes.objects.filter(user=request.user).values_list('id', flat=True)

# template.html
{% if post.id in liked_posts_ids %}
    This post was already liked.
{% else %}
    You can like this post.
{% endif %}

4. Ваша модель UserLikes (а по guideline всё-таки корректнее её назвать UserLike) – ни что иное, как ManyToMany между моделью Post и User. Следовательно, правильнее сделать так:
# models.py
from django.contrib.auth.models import User
from django.db import models

class Post(models.Model):
    user = models.ManyToManyField(User)
    slug = models.SlugField()


Другой вариант через два ForeignKey (тот же ManyToMany, только с "ручной" таблицей). Только не надо делать это руками через "models.IntegerField(blank=True, default=1)". Пусть за Вас думает база.
Ответ написан
sim3x
@sim3x
У тебя получилось нагромождение неправильных представлений об архитектуре

request.user - указывает на текущего авторизированного пользователя
я залогинился, и через request.user могу отфильтровать, то что сделал я

Появление вот таких полей свидетельствует, что что-то пошло не так
user_id = models.IntegerField()
id_post= models.IntegerField()

инт предназначен для хранения целых чисел

Не делай проверки в темплейте
{% if one_post.pk in all_likes.id_post %}

Когда твой запрос не дает, того что он по твоему мнению должен вернуть - делай мысленный експеримент.
Взять из request.user ид пользователя = 2
Сделать запрос select * from tablename where user_id = 2
Вернется | 3 | 2 | 25 |
все верно
Возможно, я что-то не так хочу или не так делаю

Отложи свои лайки на полку и пройдись еще раз по туториалу https://docs.djangoproject.com/en/1.8/intro/tutorial01/
Выучи его до такой степени, что бы самостоятельно написать его копию
После попробуй поиграть с темплейтами и вью
После попробуй добавить или убрать что-то из моделей
Переходи к новому только после того как можешь уверенно сказать, что и зачем ты сделал

Если на каком-то етапе слишком долго не можешь найти решение - пиши вопрос
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы