Не удалось заполнить базу данных django3 - PullRequest
0 голосов
/ 05 мая 2020

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

from django.shortcuts import render, redirect
from django.views.generic import View

from .models import Comment

from .forms import CommentForm


class IndexView(View):
    model = Comment
    template_name = 'home/index.html'
    form_class = CommentForm

    def get_queryset(self):
        return self.model.objects.all().order_by('-pk')

    def get_context_data(self, **kwargs):
        context = {}
        context['commentaries'] = self.get_queryset()
        context['form'] = self.form_class
        return context

    def get(self, request, *args, **kwargs):
        return render(request, self.template_name, self.get_context_data())

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            form.save()
            form.errors.as_json()
            return redirect('home:index')

и это форма

from django import forms
from django.urls import reverse_lazy

from .models import Comment


class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ['name', 'comment']
        labels = {
            'name': 'Nombre',
            'comment': 'Comentario'
        }
        widgets = {
            'name': forms.TextInput(
                attrs={
                    'class': 'form-control',
                    'placeholder': 'Ingrese su Nombre',
                    'id': 'name',
                }
            ),
            'comment': forms.Textarea(
                attrs={
                    'class': 'form-control',
                    'placeholder': 'Ingrese su comentario',
                    'id': 'comment',
                }
            )
        }

Это модель

from django.db import models


class Comment(models.Model):
    name = models.CharField(max_length=50)
    comment = models.TextField(max_length=250)
    created_at = models.DateField(auto_now=True)

    def __str__(self):
        return self.name

    def save(self):
        self.name = self.name.capitalize()

это html

            <form method="POST">
                {% csrf_token %}
                <div class="form-group">
                    <div>{{ form.name.label }}</div>
                    <div>{{ form.name }}</div>
                </div>
                <div class="form-group">
                    <div>{{ form.comment.label }}</div>
                    <div>{{ form.comment }}</div>
                </div>
                <button type="submit" class="btn btn-primary">Enviar Comentario</button>
            </form>

Я уже пытался поставить form.errors.as_ json (), чтобы узнать, что это за ошибка, но ничего не возвращает

1 Ответ

0 голосов
/ 05 мая 2020

Вам нужно вызвать super в вашем методе сохранения

def save(self, **kwargs):
    self.name = self.name.capitalize()
    super().save(**kwargs)

Метод сохранения базового класса models.Model - это то, что вставляет объект в базу данных. Переопределив его и не вызывая super, вы предотвращаете сохранение объекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...