#python #html #django #django-templates
Вопрос:
Я пытаюсь создать форму в шаблоне Django, но в ней просто не отображаются поля. мои файлы: models.py где я создал нужную таблицу
from django.db import models
from django.contrib.auth.models import User
from django.db.models.deletion import CASCADE
STATUS = (
(0,"Draft"),
(1,"Publish")
)
class Post(models.Model):
title = models.CharField(max_length=50)
slug = models.SlugField(max_length=200)
auther = models.ForeignKey(User,on_delete=CASCADE,related_name="blog_posts")
updated_on = models.DateTimeField(auto_now=True)
created_on = models.DateTimeField( auto_now_add=True)
status = models.IntegerField(choices=STATUS,default=0)
body = models.TextField()
def __str__(self):
return self.title
views.py где я создал представление для формы
from post.models import Post
from django.shortcuts import redirect, render
from . forms import PostForm
def post_list(request):
posts = Post.objects.all
form = PostForm(request.POST)
if request.method == "POST":
if form.is_valid():
form.save(commit=False)
form.auther = request.user
form.save()
return redirect("/")
else:
form = PostForm()
context = {
"posts":posts,
"form":form,
}
return render(request,'index.html',context)
forms.py где я создал форму для редактирования только одного поля в таблице
from django import forms
from django.db.models import fields
from django import forms
from . models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields='__all__'
index.html вот как я использовал форму в шаблоне html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Blog App</title>
</head>
<body>
{% for post in posts %}
<div>
<h1>{{post.title}}</h1>
</div>
{{post.body}}
{% endfor %}
<form method="post" action="/">
{% csrf_token %}
{{form}}
<input type="submit" value="save">
</form>
</body>
</html>
Ответ №1:
Вы не добавили ни одного поля в класс PostForm:
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields='__all__'
Поскольку у вас нет поля, ничего отображаться не будет.
class PostForm(forms.ModelForm):
user_name=forms.CharField()
class Meta:
model = Post
fields='__all__'