Django表单未保存

2024-10-03 13:21:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我对django比较陌生,我正在尝试实现一些modelforms。在

我的页面由两个视图组成,一个是政治部分,一个是体育部分,每一个视图都具有相同的评论形式(我的评论模型名为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'是一个控制变量,它由我的信号.py更新“pagina”字段的文件

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

在政治.html在

^{pr2}$

我的表单.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')被隐藏,因为它是由我的信号.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 save来代替信号,但同样无效:

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})

Tags: djangoinstancefromimportformifrequestsave
1条回答
网友
1楼 · 发布于 2024-10-03 13:21:33

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

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

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

相关问题 更多 >