Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Django modelformset_factory saves nothing 
:(
    Опции темы
redwatcher
  Дата 23.8.2017, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 23.8.2017

Репутация: нет
Всего: нет



Создал набор форм для простой модели. При попытке изменить в форме данные объекта модели и сохранить эти изменения в базе данных, то новые данные в результате не сохраняются и происходит редирект на страницу формы с прежними данными, хотя должны выводится хотя бы сообщения об успешности или провале операции. Терминал не возвращает никаких ошибок, в логах написано, что был передан корректный запрос, тестсервер работает без падений в нормальном режиме. Есть мнение, что причина тому отказ в валидации, но по какой причине это происходит и где именно затаилась ошибка понять пока не получается. 

urls.py (categories app)
Код

from django.conf.urls import url
from django.contrib.auth.decorators import login_required
from categories.views import CategoriesEdit

urlpatterns = [
    url(r'^$', login_required(CategoriesEdit.as_view()), name  = "categories_edit"),
]


models.py (categories app)
Код

from django.db import models

# Create your models here.

class Category(models.Model):
    name = models.CharField(max_length = 30, db_index = True, unique = True, verbose_name = "Title")
    order = models.PositiveSmallIntegerField(default = 0, db_index = True, verbose_name = "Serial number")
    def __str__(self):
        return self.name
    class Meta:
        ordering = ["order", "name"]
        verbose_name = "category"
        verbose_name_plural = "categories"


views.py (categories app)
Код

from django.views.generic.base import TemplateView
from django.forms.models import modelformset_factory
from django.shortcuts import redirect
from django.contrib import messages
from categories.models import Category
from generic.mixins import CategoryListMixin

CategoriesFormset = modelformset_factory(Category, can_delete=True, fields = '__all__', extra=1, max_num=None)

class CategoriesEdit(TemplateView, CategoryListMixin):
    template_name = "categories_edit.html"
    formset = None
    def get(self, request, *args, **kwargs):
        self.formset = CategoriesFormset()
        return super(CategoriesEdit, self).get(request, *args, **kwargs)
    def get_context_data(self, **kwargs):
        context = super(CategoriesEdit, self).get_context_data(**kwargs)
        context["formset"] = self.formset
        return context
    def post(self, request, *args, **kwargs):
        self.formset = CategoriesFormset(request.POST)
        if self.formset.is_valid():
            self.formset.save()
            messages.api.add_message(request, messages.SUCCESS, "List of categories successfully changed")
            return redirect("categories_edit")
        else:
            messages.api.add_message(request, messages.SUCCESS, "Something is wrong!!!")
            return super(CategoriesEdit, self).get(request, *args, **kwargs)


categories_edit.html (categories app)
Код

{% extends "categories_base.html" %}
{% block title %} Categories {% endblock %}
{% block main %}
    {% include "generic/messages.html" %}
    {{ formset.errors }}
    <h2>Categories</h2>
    <form action="" method="post">
        {% include "generic/formset.html" %}
        <div class="submit-button"><input type="submit" value="Save"></div>
    </form>
{% endblock %}


formset.html (categories app)
Код

{% csrf_token %}
{{ formset.management_form }}
<table class="form">
    <tr>
        <th></th>
        {% with form=formset|first %}
            {% for field in form.visible_fields %}
                <th>
                    {{ field.label }}
                    {% if field.help_text %}
                        <br>{{ field.help_text }}
                    {% endif %}
                </th>
            {% endfor %}
        {% endwith %}
    </tr>
    {% for form in formset %}
        <tr>
            <td>
                {% for field in form.hidden_fields %}
                    {{ field }}
                {% endfor %}
            </td>
            {% for field in form.visible_fields %}
                <td>
                    {% if field.errors.count > 0 %}
                        <div class="error-list">
                            {{ field.errors }}
                        </div>
                    {% endif %}
                    <div class="control">{{ field }}</div>
                </td>
            {% endfor %}
        </tr>
    {% endfor %}
</table>


messages.html (categories app)
Код

{% if messages %}
    <div id="messages-list">
        {% for message in messages %}
            <p class="{{ message.tags }}">{{ message }}</p>
        {% endfor %}
    </div>
{% endif %}


Это сообщение отредактировал(а) redwatcher - 25.8.2017, 15:07
PM MAIL   Вверх
redwatcher
Дата 26.8.2017, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 23.8.2017

Репутация: нет
Всего: нет



My inattention was my mistake. I wrote method="post" in the commented and concatenated part of the code of categories_edit.html (in my project) and forgot to write it in uncommented piece of code:

Код

   {# <form method="post" action=""> #}
    <form method="" action="">
        {% include "generic/formset.html" %}
        {# {% csrf_token %} #}
        {# {{ formset.as_p }} #}
        <div class="submit-button"><input type="submit" value="Save"></div>
    </form>


But I confused the users, because wrote everything is correct in my Question, than delete concatenated part of the code and entered the correct piece of code:

Код

    <form method="post" action="">
        {% include "generic/formset.html" %}
        {# {% csrf_token %} #}
        {# {{ formset.as_p }} #}
        <div class="submit-button"><input type="submit" value="Save"></div>
    </form>



I apologize to the users who responded to my question! Code working.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Веб-разработка и фреймворки | Следующая тема »


 




[ Время генерации скрипта: 0.1090 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.