Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 17

Как передать id статьи?

16.08.2020, 16:56. Показов 4587. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я хочу дать возможность пользователям добавлять комментарии к статье. Как правильно мне сделать привязку комментария к конкретной статье в функции leave_comment.
это models.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
from django.db import models
from django.contrib.auth.models import User
class Articles(models.Model):
    author=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='Автор')
    create_date=models.DateTimeField(auto_now=True)
    name=models.CharField("Название статьи",max_length=200)
    text=models.TextField(verbose_name="Текст")
class Comments(models.Model):
    article=models.ForeignKey(Articles,on_delete=models.CASCADE,verbose_name='Статья',related_name='comments_articles')
    author=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='Автор')
    create_date=models.DateTimeField(auto_now=True)
    text=models.TextField(verbose_name="Текст")
это urls.py
Python
1
2
3
4
5
6
7
8
9
from django.contrib import admin
from django.urls import path
from core import views
app_name='core'
urlpatterns = [
    path('detail/<int:id>', views.detail_page, name='detail_page'),
    path('detail/<int:id>/leave_comment/',views.leave_comment,name='leave_comment'),
    path('articlesl/', views.HomeListView.as_view(), name='home'),
]
это views.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from django.shortcuts import render,redirect
from .models import *
from django.views.generic.edit import FormMixin
from .forms import *
from django.urls import reverse,reverse_lazy
from django.contrib.auth.models import User
from django.http import HttpResponseRedirect
class HomeListView(ListView):
    model=Articles
    template_name='index.html'
    context_object_name='list_articles'
def detail_page(request,id):
    get_article = Articles.objects.get(id=id)
    context = {
         'get_article':get_article,
         'form':CommentForm,
     }     
    template = 'detail.html'     
    return render(request,template,context)
def leave_comment(request,id,*args,**kwargs):
    if request.method=='POST':
        form=CommentForm(request.POST)
        if form.is_valid():
            object=form.save(commit=False)
            #object.article= это привязка коммента к статье к которой его добавляют
            object.author=request.user
            object.save()
            return super().form_valid(form)
    return HttpResponseRedirect(reverse('core:detail',args=(a.id,)))
это forms
Python
1
2
3
4
5
6
7
8
9
10
11
12
from django import forms
from .models import *
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.models import User
class CommentForm(forms.ModelForm):
    class Meta:
        model=Comments
        fields=('text',)
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        for field in self.fields:
            self.fields[field].widget.attrs['class']='form-control'
это detail.html
HTML5
1
2
3
4
5
6
7
<h1>{{get_article.name}}</h1>
<p>{{get_article.text}}</p>
<form action="{%url 'core:leave_comment' get_article.id%}" method="post" id="add_form">
       {% csrf_token %}
       {{form.as_p}}
</form>
<button type="submit" form="add_form" class="btn btn-primary">Создать</button>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2020, 16:56
Ответы с готовыми решениями:

Как анонс статьи убрать из статьи?)
Допустим написал я статью, использовал тег More, мне нужно что-бы все что до тега More не было при открытии статьи.

Вывод на страницу статьи, списком заголовки всех других статей, за исключением текущей статьи
Здравствуйте, уважаемые программисты! Подскажите пожалуйста, оформляю на своем простом маленьком сайте к каждой статье блок...

Не могу разобраться как передать корректно передать массив из функции в функцию
//--------------------------------------------------------------------------- #pragma hdrstop ...

5
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
16.08.2020, 23:06
Если я правильно понял вопрос, надо в форме передать скрытым параметр id статьи.

Это будет в html:

HTML5
1
<input type="hidden" ...>
А в джанго это примерно вот так:

Python
1
2
3
4
class CommentForm(forms.ModelForm):
    class Meta:
        ...
        widgets = {'article': forms.HiddenInput()}
Я очень плохо пишу такие вещи из головы. Если что не так, прошу извинить. В общем, просто передаем статью в скрытом параметре.
0
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 17
17.08.2020, 11:00  [ТС]
Так надо?
Python
1
2
3
4
5
6
7
8
9
class CommentForm(forms.ModelForm):
    class Meta:
        model=Comments
        fields=('text',)
        widgets = {'article': forms.HiddenInput()}
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        for field in self.fields:
            self.fields[field].widget.attrs['class']='form-control'
Добавлено через 28 минут
Или так?
Python
1
2
3
4
5
6
7
8
9
class CommentForm(forms.ModelForm):
    class Meta:
        model=Comments
        widgets = {'article': forms.HiddenInput()}
        fields=('article','text',)
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        for field in self.fields:
            self.fields[field].widget.attrs['class']='form-control'
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
17.08.2020, 14:11
Дебажить надо. Там кроме этих полей еще есть автор. В общем, пробуйте. Я не любитель из головы советы давать. Направление я вам дал, а вы еще хотите, чтобы я за вас код написал, да еще без компьютера.

Вы возле комьпютера, вот запустите и посмотрите, какие поля н ужно включить в форму.
0
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 17
17.08.2020, 19:57  [ТС]
Я нашёл способ лучше с помощью get_object_or_404
Python
1
from django.shortcuts import render,redirect, get_object_or_404
Python
1
2
3
4
5
6
7
8
9
10
def leave_comment(request,id,*args,**kwargs):
    if request.method=='POST':
        form=CommentForm(request.POST)
        if form.is_valid():
            object=form.save(commit=False)
            object.article= get_object_or_404(Articles, id=id)
            object.author=request.user
            object.save()
            return super().form_valid(form)
    return HttpResponseRedirect(reverse('core:detail',args=(a.id,)))
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
18.08.2020, 06:19
Цитата Сообщение от pasan Посмотреть сообщение
object.article= get_object_or_404(Articles, id=id)
это лучше вынести из блока if form.is_valid

return super().form_valid(form)
это вообще что такое в FBV?

P.S. Комментарии лучше связывать через GenericForeignKey
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.08.2020, 06:19
Помогаю со студенческими работами здесь

Как из JavaBean передать в Oracle 8 передать оператор определения данных
Очень бы хотелось узнать как подготовить БД к получению дерективы(не открыть,и не передача sql запроса). Например в ручную это можжно...

как передать вместо ip адреса 127.0.0.1 переменную в которой хранится ip и можно ли передать не локальный адресс
#include &quot;keyloger.h&quot; #include &lt;windows.h&gt; #include &lt;stdio.h&gt; #include &lt;tchar.h&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; ...

Как размещать статьи
Правильно ли я понимаю, что размещать статьи нужно на ресурсах со сходной тематикой. И ТиЦ и PR этих ресурсов не имеют осбого значения?

Статьи в телеграмм, как?
Всем привет, столкнулся с миграцией в телеграмм. Раньше в нем не работал вообще.. Увидел на каналах прокаченых, что как то делают картинку,...

Как удалить статьи
Здравствуйте. Как полностью удалить несколько статей с сайта в wordpress?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru