Поля ввода Djando Form отображаются только после отправки недействительной формы
Я работаю над образовательным приложением "Аукционы", которое должно позволить пользователям делать ставки и добавлять комментарии к существующему аукционному объявлению. Я хочу реализовать комментарии в виде CommentForm и включить сниппет comment_add.html этой формы в шаблон view_listing.html, который в свою очередь расширяет базовый layout.html.
Но в view_listing.html изначально не отображается поле ввода из comment_add.html. Поле ввода "textarea" отображается только после нажатия кнопки "submit", так как это обязательное поле.
Ожидаемый результат: скриншот области "Комментарий" на странице
Фактический результат: скриншот области "Комментарий" на странице
Результат после нажатия кнопки "Commit": скриншот области "Комментарий" на странице
Конечно, реализация поля ввода комментария как <input> в comment_add.html работает.
Я предположил, что проблема связана с тем, что один и тот же контекст передается в view_listing.html из других представлений (имя переменной контекста одинаково для всех представлений - "listing"). Но пока мне не удалось найти решение.
views.py
def comment_add(request, listing_id):
listing = Listing.objects.get(pk=listing_id)
if request.method == "POST":
form = CommentForm(request.POST)
if form.is_valid():
text = form.cleaned_data["text"]
author = User.objects.get(pk=request.user.id)
comment = Comment(text=text, author=author)
comment.save()
context = {"form": form, "listing": listing}
return HttpResponseRedirect(reverse("auctions:listing", args=(listing.id,)))
else:
context = {"form": form, "listing": listing, "watched": watched}
return render(request, "auctions/view_listing.html", context)
else:
context = {"form": CommentForm(), "listing": listing, "watched": watched}
return render(request, "auctions/view_listing.html", context)
models.py
class Comment(models.Model):
text = models.CharField(max_length=1024)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=CASCADE, related_name="author")
date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.text
forms.py
class CommentForm(forms.ModelForm):
text = forms.CharField(widget=forms.Textarea, max_length=1024, label="Comment")
class Meta:
model = Comment
fields = ("text",)
templates:
view_listing.html
{% if user.is_authenticated %}
{% if not watched %}
<div>
<span><a type="button" class="btn btn-primary"
href="{% url 'auctions:watchlist_add' listing_id=listing.id %}">
Add to Watchlist</a></span>
</div>
{% else %}
<div>
<span class="btn btn-secondary">In Watchlist</span>
</div>
{% endif %}
{% include "auctions/close_listing.html" %}
{% include "auctions/comment_add.html" %}
{% endif %}
comment_add.html
<form action="{% url 'auctions:comment_add' listing.id %}" method="POST">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit Comment">
</form>
Что я должен сделать, чтобы реализовать комментарии именно таким образом: с помощью CommentForm и {% include %} / {% extends %}?