Не могу заставить форму работать для ответов на комментарии
Я не могу заставить форму сообщения работать для ответов на сообщение (комментарии к сообщению). Она работает через админку Django, но я не могу отобразить форму в шаблоне, что, как я думаю, связано с моим бесполезным бэкендом.
Планировка "сайта": Front: Первая страница содержит все посты и показывает 3 последних комментария к этим постам (эта часть работает).
Посты: Когда вы хотите прочитать пост, он перенаправляет вас на другую страницу, которая показывает выбранный пост (как обычно) и здесь вы можете увидеть все комментарии к посту (в настоящее время добавленные непосредственно через Django Admin). Здесь мне нужна форма, чтобы посетитель мог ответить на сообщение. (Эта часть не работает).
Формы:
from django import forms
from django.forms import widgets, TextInput, ModelForm
from .models import Comments, Post
class PostForm(ModelForm):
class Meta:
model = Post
fields = ['entry', 'post_image']
labels = {
'entry': "Post something spoopy:",
}
widgets = {
'entry': widgets.Textarea(attrs={'rows':10, 'cols':5})
}
def __init__(self, *args, **kwargs):
super(PostForm, self). __init__(*args, **kwargs)
for name, field in self.fields.items():
field.widget.attrs.update({'class': 'input'})
class CommentForm(ModelForm):
class Meta:
model = Comments
fields = ['comment_entry', 'comment_image']
labels = {
'comment_entry': "Answer!",
}
def __init__(self, *args, **kwargs):
super(CommentForm, self).__init__(*args, **kwargs)
for name, field in self.fields.items():
field.widget.attrs.update({'class': 'input'})
Модели:
from django.db import models
import uuid
from django.db.models.fields import AutoField
# Create your models here.
class Post(models.Model):
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
entry = models.TextField(max_length=2000)
created = models.DateTimeField(auto_now_add=True)
post_image = models.ImageField(null=True, blank=True, default="default.jpg")
ip_adress = models.GenericIPAddressField(protocol='both', unpack_ipv4=False, default='192.168.1.1')
def __str__(self):
return self.entry
@property
def imageURL(self):
try:
url = self.post_image.url
except:
url = ''
return url
class Comments(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='post_comments')
comment_entry = models.CharField(max_length=2000, blank=True, null=True)
comment_image = models.ImageField(null=True, blank=True, default="default.jpg")
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['created_on']
def __str__(self):
return self.comment_entry
@property
def imageURL(self):
try:
url = self.comment_image.url
except:
url = ''
return url
Просмотров:
from django.shortcuts import get_object_or_404, render, redirect
from .models import Post, Comments
from django.utils import timezone
from .forms import PostForm, CommentForm
# Create your views here.
def discussion(request, pk):
post = Post.objects.get(id=pk)
return render(request, 'discussions/discussion.html', {'post': post, 'replies': Comments.objects.filter(post_id=post)})
def discussions(request):
posts = Post.objects.filter(created__lte=timezone.now()).order_by('-created')
if request.method == 'POST':
form = PostForm(request.POST, request.FILES)
if form.is_valid():
post = form.save(commit=False)
post.created = timezone.now()
post.save()
return redirect('discussions')
else:
form = PostForm()
return render(request, 'discussions/discussions.html', {'posts': posts, 'form': form})
def comments(request):
form = CommentForm()
if request.method == 'POST':
post = CommentForm(request.POST, request.FILES)
if post.is_valid():
post = form.save(commit=False)
form.save()
return redirect('discussion')
context = {'form': form}
return render(request, "discussions/discussion.html", context)
Шаблон
{% extends 'main.html' %}
{% block content %}
<div class="container">
<h1>{{ post }}</h1>
<img class="_thumbnail" src="{{post.imageURL}}" alt="project thumbnail" />
<ul>
{% for reply in post.post_comments.all %}
<li>{{ reply.comment_entry }}</li>
{% endfor %}
</ul>
<form method="POST" class="post-form" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Post</button>
</form>
</div>
{% endblock content %}