【问题标题】:How to make form html for updateview如何为updateview制作表单html
【发布时间】:2021-07-31 13:23:09
【问题描述】:

我正在使用我的 html 文件为 CreateView 和 UpdateView 创建自己的表单,因为我不想显示像 {{form.as_p}} 这样的表单。

forms.py

from django import forms
from .models import Post

class PostCreationForm(forms.ModelForm):

    class Meta:
        model = Post
        fields = ('title', 'cover', 'text',)
        widgets = {
            'title': forms.TextInput(attrs={'class': 'title'}),
            'cover': forms.FileInput(attrs={'class': 'image'}),
            'text': forms.TextInput(attrs={'class': 'text'})
        }

class PostDeleteForm(forms.ModelForm):

    class Meta:
        model = Post
        fields = ('__all__')

views.py

from django.shortcuts import reverse
from django.http import HttpResponseRedirect
from django.views import generic
from .models import Post
from .forms import PostCreationForm, PostDeleteForm

class PostListView(generic.ListView):
    model = Post
    context_object_view = 'post_list'
    template_name = 'forum/post_list.html'


class PostDetailView(generic.DetailView):
    model = Post
    context_object_view = 'post'
    template_name = 'forum/post_detail.html'

class PostCreateView(generic.CreateView):
    model = Post
    form_class = PostCreationForm
    template_name = 'forum/post_create.html'

    def form_valid(self, form):
        if form.is_valid():
            response = form.save(commit = False)
            response.author = self.request.user
            response.save()
            return HttpResponseRedirect(reverse('post_detail', args=[str(response.id)]))


class PostUpdateView(generic.UpdateView):
    model = Post
    context_object_view = 'post'
    form_class = PostCreationForm
    template_name = 'forum/post_edit.html'

    def get_post(self, pk):
        return get_object_or_404(Post, pk=pk)

    def form_valid(self, form):
        if form.is_valid():
            response = form.save(commit = False)
            response.save()
            return HttpResponseRedirect(reverse('post_detail', args=[str(response.id)]))


class PostDeleteView(generic.DeleteView):
    model = Post
    context_object_view = 'post'
    form_class = PostDeleteForm
    template_name = 'forum/post_delete.html'
    success_url = '/'

    def get_post(self, pk):
        return get_object_or_404(Post, pk=pk)

post_create.html

{% extends '_base.html' %}

{% block css %}
    {% load static %}
    <link rel="stylesheet" href="{% static 'css/post_create.css' %}">
{% endblock css %}

{% block title %}Questions{% endblock title %}

{% block content %}

<h1 class="m-title">New Post</h1>

<div class="form">
    <form action="" method="post" enctype="multipart/form-data" id='postform'>
        {% csrf_token %}
        <p class="n-title"><label for="id_title">Title: </label></p>
        <input id="id_title" type="text" name="title" class="title" maxlength="40" required>

        <p class="n-image"><label for="id_cover">Image: </label></p>
        <input id="id_cover" type="file" name="cover" class="image" required>

        <p class="n-text"><label for="id_text">Text: </label></p>
        <textarea id="id_text" placeholder="Enter your text here" name="text" class="text" form='postform' required></textarea>
        <button class="btn btn-success" id="button" type="submit">Submit</button>
    </form>
</div>

{% endblock content %}

我也想为UpdateView做,但不知道如何让输入字段显示帖子的当前值(标题、文本)。 html 文件与 CreateView 相同。如何让输入显示正在修改的帖子的当前值?

【问题讨论】:

    标签: python html django


    【解决方案1】:

    您可能不想为这样的表单手动编写 html。

    如果必须,您可以传入如下值:

    <input id="id_title" type="text" name="title" class="title" maxlength="40" value="{{ form.title.value }}" required>
    

    最好使用 django 呈现该字段,以便您的表单字段属性(如 maxlength 和 required)与您的表单类规范相匹配。例如,这将为您的标题字段创建输入:

    {{ form.title }}

    如果您想要更灵活的样式,请查看crispy-forms 或我的偏好floppyforms

    【讨论】:

      猜你喜欢
      • 2017-01-02
      • 1970-01-01
      • 2013-11-27
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      相关资源
      最近更新 更多