Моя модель формы не отображается в браузере. Она появляется только после того, как я нажимаю кнопку отправки, как обязательное поле, которое должно быть заполнено.
Моя форма модели не отображается в браузере. Она появляется только после того, как я нажимаю кнопку submit как обязательное поле, которое должно быть заполнено. Я искал похожие проблемы, но контекст был немного другой, и исправления не могли работать на моем проекте.
Мои модели
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
pass
class Post(models.Model):
body = models.TextField()
date = models.DateTimeField(auto_now_add = True)
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="author", default=None)
def __str__(self):
return f"{self.body} by {self.author} at {self.date}"
Forms.py
from django import forms
from django.forms import ModelForm
from .models import Post
class PostForm(ModelForm):
class Meta:
model = Post
fields = ['body']
widgets = {
"body": forms.Textarea(attrs={'class': 'form-control col-md-5 col-lg-6'}),
}
Views.py
def create_post(request):
posted = False
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.author = request.user
instance.save()
return HttpResponseRedirect("/create_post?posted=True")
else:
form = PostForm()
if "posted" in request.GET:
posted = True
return render(request, "network/create_post.html", {
"form": form,
"posted": posted
})
Урлы
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
path("login", views.login_view, name="login"),
path("logout", views.logout_view, name="logout"),
path("register", views.register, name="register"),
path("create_post", views.create_post, name="create_post"),
path("create_post_page", views.create_post_page, name="create_post_page")
]
Шаблон
{% extends "network/layout.html" %}
{% block body %}
{% if posted %}
Succseful
{% else %}
<h2>Create a new post</h2>
<form action="{% url 'create_post' %}" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input class="btn btn-secondary" type="submit" value="Post">
</form>
{% endif %}
{% endblock %}
Просто он не отображается на странице, кроме как в виде предупреждения после нажатия Post(Submit). Заранее спасибо.