Форма Джанго не сохраняется - PullRequest
0 голосов
/ 10 июля 2019

Я относительно новичок в 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' - это контрольная переменная, которая проверяется моим файлом signal.py для обновления поля 'pagina'

У меня были проблемы с кнопками отправки в моих пользовательских моделях форм, форма отображается правильно, и когда я записываю что-то в форму и отправляю ее, она отображает сообщение об успехе, но комментарий не появляется в разделе комментариев, и он также не отображается в оболочке Django.

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'])

Я не получаю никакого сообщения об ошибке, и все ведет себя так, как должно, за исключением того факта, что комментарии не сохраняются

Я тоже пытался сделать коммит == Ложное сохранение вместо сигналов, но это было так же неэффективно:

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

1 Ответ

1 голос
/ 11 июля 2019

usuarios и comentarios были определены на уровне модуля (файла). Как таковые они не будут обновляться в течение всего жизненного цикла процесса.

Вы должны переместить оба из них в тело представления, чтобы запрос выполнялся при каждом запросе

usuarios = Usuario.objects.all()
comentarios = Comentario.objects.all()
return render(request, 'main/politics.html', {'usuarios': usuarios,
                                            'comentarios': comentarios,
                                            'form': form})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...