При использовании Django функция save () не работает с модельными формами - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь выучить Django. Я считаю, что моя форма работает правильно, но данные не сохраняются в базе данных.

Это моя модель:

from django.db import models

# Create your models here.
class parameters(models.Model):
    interval_1 = models.PositiveIntegerField()
    interval_2 = models.PositiveIntegerField()
    interval_3 = models.PositiveIntegerField()
    interval_4 = models.PositiveIntegerField()
    interval_5 = models.PositiveIntegerField()
    interval_6 = models.PositiveIntegerField()
    cost_1 = models.DecimalField(max_digits=19, decimal_places=2)
    cost_2 = models.DecimalField(max_digits=19, decimal_places=2)
    cost_3 = models.DecimalField(max_digits=19, decimal_places=2)
    cost_4 = models.DecimalField(max_digits=19, decimal_places=2)
    cost_5 = models.DecimalField(max_digits=19, decimal_places=2)
    cost_6 = models.DecimalField(max_digits=19, decimal_places=2)

Это моя форма:

from django import forms
from django.forms import ModelForm

from .models import parameters

# Create your forms here.

class set_parameters(forms.ModelForm):
    class Meta:
        model = parameters
        fields = "__all__"

Это мой взгляд:

from django.shortcuts import render

# Create your views here.
from .models import parameters
from .forms import set_parameters

def frequence_create_view(request):
    form = set_parameters(request.POST or None)
    if form.is_valid():
        form.save()
        print(request)
        print(form)
        form = set_parameters()
    else:
            print (form.errors)

    context = {
        'form': form
    }
    return render(request, 'settings/settings.html', context)

Это мои шаблоны:

<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
    {% block frequence %}
    {% endblock %}
    {% block cost %}
    {% endblock %}
</body>
</html>

{% extends 'base.html' %}
{% block frequence %}
<form action='.' method='POST'> {% csrf_token %}
    {{ form.as_p }}
    <input type='submit' value='save' />
</form>
{% endblock %}

И это мой URL

from django.contrib import admin
from django.urls import path
from settings.views import frequence_create_view

urlpatterns = [
    path('admin/', admin.site.urls),
    path('frequence_create/', frequence_create_view),
]

Проблема, с которой я сталкиваюсь, заключается в том, что Я отправляю форму, информация не хранится в базе данных.

Может кто-нибудь попытаться объяснить, в чем проблема?

Ответы [ 2 ]

1 голос
/ 28 марта 2020

исправьте ваш код, как показано, что также обработает запрос get

def frequence_create_view(request):
    if request.method == "POST":
        form = set_parameters(request.POST or None)
        if form.is_valid():
           form.save()
           return redirect('/')
    else:
        form = set_parameters()
    return render(request, 'your.html', {'form': form})
0 голосов
/ 28 марта 2020

Спасибо за ваши ответы. Я понимаю, что мой код действительно работал, я видел свои записи в базе данных при использовании инструмента командной строки sqlite. Однако я не вижу своих пользователей в админе GUI. Спасибо, Бмонс, за предложение кода, которое также работает.

...