Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django表单未保存_Python_Forms_Django - Fatal编程技术网

Python Django表单未保存

Python Django表单未保存,python,forms,django,Python,Forms,Django,我对django比较陌生,我正在尝试实现一些模型表单 我的页面由两个视图组成,一个是政治部分,一个是体育部分,每个视图都有相同的评论形式(我的评论模型名为Comentario)。它有一个用于内容的字段和一个用于注释所属部分的字段。两种观点基本相同,因此我将仅展示政治观点: from django.contrib import messages from django.shortcuts import render from django.views.generic import CreateVi

我对django比较陌生,我正在尝试实现一些模型表单

我的页面由两个视图组成,一个是政治部分,一个是体育部分,每个视图都有相同的评论形式(我的评论模型名为Comentario)。它有一个用于内容的字段和一个用于注释所属部分的字段。两种观点基本相同,因此我将仅展示政治观点:

from django.contrib import messages
from django.shortcuts import render
from django.views.generic import CreateView

from usuarios.models import Usuario

from .forms import CrearComentario
from .models import Comentario

usuarios = Usuario.objects.all()
comentarios = Comentario.objects.all()
pag = ''

def politics(request):
    if request.user.is_authenticated:
        if request.method == 'POST':
            form = CrearComentario(request.POST, instance=request.user)
            if form.is_valid():
                messages.success(request, 'Publicado!')
                pag = 'politics'
                form.save()
                form = CrearComentario()
        else:
            form = CrearComentario(request.POST,instance=request.user)
    else:
        messages.warning(request, 'Comentario no válido')
        form = CrearComentario(request.POST)
    return render(request, 'main/politics.html', {'usuarios': usuarios,
                                                'comentarios': comentarios,
                                                'form': form})

如果您想知道,“pag”是一个控制变量,我的signals.py文件会检查它以更新“pagina”字段

我的自定义模型表单中的提交按钮有问题,表单显示正确,当我在表单中写入内容并提交时,它会显示一条成功消息,但注释不会出现在注释部分,也不会出现在django shell中

politics.html

{%extends'main/base.html%}
{%load static%}
{%load crispy_forms_tags%}
{%block comentarios%}
科门塔里奥斯
    {%在comentarios%中发表评论} {%if comment.pagina=='politics%}
  • {{comment.contenido}
    {{comment.usuario},{{comment.fecha}}

  • {%endif%} {%endfor%}
{%if user.u经过身份验证%} {%csrf_令牌%} 杜德雅诺斯意见 {{form | crispy}} 好啊 {%else%} 伊尼西亚·塞西翁·帕拉·科门塔里奥斯 {%endif%} {%endblock%}
我的forms.py如下所示:

from django import forms
from .models import Comentario

class CrearComentario(forms.ModelForm):
    contenido = forms.CharField(max_length = 250, required=False, widget=forms.Textarea)
    pagina = forms.CharField(max_length = 250, required=False, widget=forms.HiddenInput())

    class Meta:
        model = Comentario
        fields = ['contenido', 'pagina']
确定注释属于哪个部分(“pagina”)的字段被隐藏,因为它是由my signals.py文件设置的:

from django.db.models.signals import pre_save
from django.dispatch import receiver
from .models import Comentario
from .views import pag
from .forms import CrearComentario


@receiver(pre_save, sender=Comentario)
def fijar_pagina(sender, instance, **kwargs)
    if pag:
        instance.pagina = pag
        pag = ''
        instance.save(update_fields['pagina'])
我没有收到任何错误消息,除了没有保存评论之外,其他一切都正常运行

我也尝试了commit==False保存而不是信号,但同样无效:

def politics(request):
    if request.user.is_authenticated:
        if request.method == 'POST':
            form = CrearComentario(request.POST, instance=request.user)
            if form.is_valid():
                messages.success(request, 'Publicado!')
                pag = 'politics'
                comentario = form.save(commit=False)
                comentario.pagina = 'sonsol'
                comentario.save()
                form = CrearComentario()
        else:
            form = CrearComentario(request.POST,instance=request.user)
    else:
        messages.warning(request, 'Comentario no válido)
        form = CrearComentario(request.POST)
    return render(request, 'main/politics.html', {'usuarios': usuarios,
                                                'comentarios': comentarios,
                                                'form': form})

usuarios
comentarios
都是在模块(文件)级别定义的。因此,它们在进程的生命周期内不会更新

您应该将这两个都移动到视图主体中,以便在每个请求上运行查询

usuarios = Usuario.objects.all()
comentarios = Comentario.objects.all()
return render(request, 'main/politics.html', {'usuarios': usuarios,
                                            'comentarios': comentarios,
                                            'form': form})

这是有道理的,但问题仍然存在,我应该尝试改变整个系统吗?