Python Django表单未保存
我对django比较陌生,我正在尝试实现一些模型表单 我的页面由两个视图组成,一个是政治部分,一个是体育部分,每个视图都有相同的评论形式(我的评论模型名为Comentario)。它有一个用于内容的字段和一个用于注释所属部分的字段。两种观点基本相同,因此我将仅展示政治观点: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
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})
这是有道理的,但问题仍然存在,我应该尝试改变整个系统吗?