Django 表单仅在我按下提交按钮时显示

时间:2021-06-19 21:11:01

标签: django django-forms django-templates

我的表单是隐藏的,它只显示提交按钮,当我点击它时,表单会显示。

Crear Tarea= 创建任务。

它基本上是创建任务的 crud。

以下是我的观点:

class Crear_Tarea(View):
def get(self, request,*args,**kwargs):
    context = {
        'form': TareaForm()
    }
    return render(request, "crear_tarea.html", context)

def post(self, request,*args,**kwargs):
    context = {
        'form': TareaForm()
    }
    formulario = TareaForm(request.POST or None)
    if formulario.is_valid():
        formulario.save()
        messages.success(request, 'Tablero seleccionado con éxito!')
    context['crear_tarea']= formulario
    return render(request, "crear_tarea.html", context)

我的表格:

class TareaForm(forms.ModelForm):
class Meta:
    model = Tarea
    fields = ('nombre','descripcion','fecha_creacion','fecha_termino','user', 'id_columna'
    ,'id_tipo','detalle','id_documento','estado','estado_avance','posicion')
def save(self, commit=True):
    user = super().save(commit=False)
    user.id = self.cleaned_data['user']

    if commit:
        user.save()
    return user

和我的 Models.py

class Tarea(models.Model):
id_tarea = models.AutoField(primary_key=True)
nombre = models.CharField(max_length=99)
descripcion = models.CharField(max_length=99)
fecha_creacion = models.DateTimeField(null=True, blank=True)
fecha_termino = models.DateTimeField(null=True, blank=True)
user = models.ForeignKey(Usuario, on_delete=models.CASCADE)
id_columna = models.ForeignKey('Columna', on_delete=models.CASCADE)
id_tipo = models.ForeignKey('Tarea_tipo', on_delete=models.CASCADE)
detalle = models.CharField(max_length=255)
id_documento = models.ForeignKey('Documento', on_delete=models.CASCADE)
estado = models.IntegerField(blank=True, null=True)
estado_avance = models.IntegerField(blank=True, null=True)
posicion = models.IntegerField(blank=False, null=False)
def __str__(self):
    return self.nombre

crear_tarea.html

{% extends "base.html" %}
{% load static %}
<!doctype html>
<html lang="en">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>{% block title %}Crear Tarea Ari-J{% endblock %}</title>
    {% block content %}
    <div class="container-fluid">
        <div class="row mt-5">
            <div class="col-12 my-5">
                <h1 style="font-size: 42;">Crear Tarea</h1>
                {% if messages %}
                <ul class="messages">
        {% for message in messages %}
        
        <li  {% if message.tags %} class=" {{ message.tags }} " {% endif %}> {{ message }} </li>
        {% endfor %}
    </ul>
    {% endif %}
                <form action="" method="POST" enctype="multipart/form-data">
                    {% csrf_token %} 
                    <table class="table table-bordered table-striped text-center"> 
                        {{ crear_tarea.as_table }} 
                    </table> 
                    <button type="submit" class="btn btn-primary" name='crear_tarea'>Crear Tarea</button>
                </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
    {% endblock %}
</html>

它只有在我把所有东西都用到 GET 方法时才有效,但是当我使用 get 时,我无法在数据库中添加新任务。

1 个答案:

答案 0 :(得分:1)

将您的 post 方法更改为:

def post(self, request,*args,**kwargs):
    formulario = TareaForm(request.POST or None)
    if formulario.is_valid():
        formulario.save()
        messages.success(request, 'Tablero seleccionado con éxito!')
    context = {
        'form': formulario
    }
    return render(request, "crear_tarea.html", context)

然后更新您的模板以使用 {{ form.as_table }} 代替 {{ crear_tarea.as_table }}