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

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

16.08.2020, 16:56. Показов 4665. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru