Django dynamici c Проблема с URL - недопустимый литерал для int () с основанием 10: - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь создать динамический c URL-адрес, который добавляет имя текущего пользователя в путь, когда он пытается go, на свою личную страницу сообщений. На странице личных постов я отфильтровал все посты и показал список постов только текущего пользователя. Я просто хочу добавить его имя в URL. это оно. Я много чего перепробовал и потерпел неудачу. У меня такое ощущение, что проблема в том, что автор ссылается на встроенную пользовательскую модель Django.

Мой код:

url:

    path('<username>/', views.personalposts, name='personalposts'),

Представление:

До просмотра было:

def personalposts(request, username):
    items = Post.objects.filter(author=request.user)

    return render(request, 'TheApp/personalposts.html', {'items':items})

I все еще хочу отображать личные сообщения, как это. Это работает, но без динамического c URL.

Теперь я изменил его на:

def personalposts(request, username):
    items = Post.objects.get(author=username)

    return render(request, 'TheApp/personalposts.html', {'items':items})

Модель:

class Post(models.Model):
    author = models.ForeignKey(User, on_delete=models.PROTECT)
    #כדי שרק משתמשים רשומים יוכלו ליצור פוסט
    title = models.CharField(max_length=200)
    text = models.TextField()
    create_date = models.DateTimeField(default=timezone.now)
    post_views = models.IntegerField(default=0)

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

К нашел одну проблему! В моей базе. html я использовал Realtive Url и он ожидал и paramater. Но теперь я могу написать что угодно в URL, и это все еще работает ..

0 голосов
/ 17 апреля 2020

in

items = Post.objects.get(author=username)

вы проверяете, совпадает ли поле автора с именем пользователя, вы можете искать поля FK следующим образом:

items = Post.objects.filter(author__username=username)

, но обратите внимание, что если у вас есть несколько авторов с одним и тем же именем пользователя.

Это похоже на: Django - фильтрация по свойствам внешнего ключа

РЕДАКТИРОВАТЬ: исправлено для фильтра

РЕДАКТИРОВАТЬ: чтобы убедиться, что только сам пользователь может видеть сообщения:

def personalposts(request, username):
    if username == request.user.username:
        items = Post.objects.filter(author__username=username)
        return render(request, 'TheApp/personalposts.html', {'items':items})
    else:
        # handle it
        raise PermissionDenied() # as a example
...