Форма Django не работает в html шаблоне, ее просто показывает кнопка

#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__'