我对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”字段
我在自定义modelsforms中遇到了提交按钮,该表单显示正确,当我在该表单中编写内容并提交时,它显示成功消息,但该注释未出现在注释部分中,并且也不会出现在django shell中。
politics.html
{% extends 'main/base.html' %}
{% load static %}
{% load crispy_forms_tags %}
<!-- Here would be the content-->
{% block comentarios %}
<h3>Comentarios</h3>
<ul class="a">
{% for comment in comentarios %}
{% if comment.pagina == 'politics' %}
<li>
<span>{{ comment.contenido }}</span>
<br>
<small>{{ comment.usuario }} , {{ comment.fecha }}</small>
<hr>
<br>
</li>
{% endif %}
{% endfor %}
</ul>
{% if user.is_authenticated %}
<form method="POST" enctype="multipart/form-data" action="http://localhost:8000/main/politics/">
{% csrf_token %}
<fieldset class="form-group">
<legend>Dejanos tu opinion</legend>
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">OK</button>
</div>
</form>
{% else %}
<legend>Inicia sesión para poner comentarios</legend>
{% 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”)的字段已隐藏,因为它是由我的signal.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})
答案 0 :(得分:1)
if (!self.checkIsAnimOverridden()) {
self.view.snapshot()
}
self.animation(vc1: vc1, vc2: vc2, container: container, duration: self.getDuration())
和usuarios
都在模块(文件)级别定义。因此,它们将在过程的整个生命周期内都不会更新。
您应该将它们都移到视图主体中,以便对每个请求都运行查询
comentarios