У меня есть форма, созданная в comments/forms.py
from django import forms
from .models import Comment
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('body',)
эта форма имеет шаблон в comments/comment_form.html:
<h2>this is the comment form</h2>
<form class="post-form" method="post" action="{% url 'comments:create' post.id %}">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Save</button>
</form>
как видите, я отправляю эту форму в комментарии: создать. это представление для обработки формы:
def create(request, post_id):
post = get_object_or_404(Post, pk= post_id)
group = post.group
if request.method == "POST":
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.author = request.user
comment.post = post
comment.pub_date = timezone.now()
comment.save()
return redirect('/groups/' + str(group.id))
else:
form = CommentForm()
return render(request, 'comments/comment_form.html', {'form':form})
Проблема в том, что я отображаю форму в «groups/detail.html»:
{% include "comments/comment_form.html" %}
проблема в том, что эта форма явно требует post_id, потому что комментарий относится к посту. ПРОБЛЕМА В ТО, ЧТО У МЕНЯ НЕТ ДОСТУПА К ОТДЕЛЬНОМУ СООБЩЕНИЮ НА СТРАНИЦЕ ДЕТАЛИ ГРУППЫ, ИЛИ Я, ПО КРАЙНЕЙ МЕРЕ, НЕ ЗНАЮ, КАК ПОЛУЧИТЬ ДОСТУП К ОТДЕЛЬНОМУ СООБЩЕНИЮ. ниже представлен подробный вид группы:
def detail(request, group_id):
group = get_object_or_404(Group, pk= group_id)
posts = Post.objects.filter(group__id = group_id)
post = posts.objects.first()
form = CommentForm(request.POST)
return render(request, 'groups/detail.html', {'group': group, 'posts':posts, 'post':post, 'form':form})
как видите, я просто взял первый пост (в целях тестирования), хотя это не то, что мне нужно. Я хочу, чтобы захватить сообщение, для которого был сделан комментарий. Я не могу получить его из URL-адреса, потому что нет смысла включать post_id для страницы сведений о группе. вот URL-адрес страницы сведений о группах:
app_name = 'groups'
urlpatterns = [
path('<int:group_id>/', views.detail, name='detail'),
]
Я просто хочу знать, есть ли способ захватить отдельное сообщение на странице сведений о группе, чтобы я мог отправить форму в представление комментариев: создать, которое обрабатывает его правильно. для создания комментариев требуется post_id:
def create(request, post_id):
post = get_object_or_404(Post, pk= post_id)
group = post.group
if request.method == "POST":
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.author = request.user
comment.post = post
comment.pub_date = timezone.now()
comment.save()
return redirect('/groups/' + str(group.id))
else:
form = CommentForm()
return render(request, 'comments/comment_form.html', {'form':form})
Короче говоря, мне нужно создать экземпляр переменной в представлении сведений о группе, чтобы я мог передать ее в форму, чтобы она могла передать ее в представление создания комментариев. Любые идеи?