Django:无法从Form中保存数据到数据库

时间:2018-10-09 02:40:15

标签: python django

我一直在遵循教程,但是进行一些小的更改并不允许我将表单保存在DB中。

但是,我知道模型是正确的,因为我可以从shell中保存对象。

提交后,我没有任何错误,我被重定向到主页。

但是,如果我提交表单然后去管理员,我会看到注册的模型,但是其中没有任何记录(通过shell保存的记录除外)。怎么样?

models.py:

class TamaniosCantidades(models.Model):
    TAMANIOS = (('498', '2" x 2"',), ('499', '3" x 3"',),
               ('500', '4" x 4"',), ('501', '5" x 5"',))

    CANTIDADES = (('100', '50',), ('100', '100',),
                ('150', '150',))

    tamanios = models.CharField(max_length=10, choices=TAMANIOS)
    cantidades = models.CharField(max_length=10, choices=CANTIDADES)

forms.py:

from django import forms
from .models import TamaniosCantidades

class TamaniosCantidadesForm(forms.ModelForm):
    class Meta:
        model = TamaniosCantidades
        fields = ['tamanios', 'cantidades']

urls.py:

from . import views
from django.urls import path, include

urlpatterns = [
    path('', views.index),
    path('productos/', views.productos),
    path('post_url/', views.post_treasure, name='post_treasure'),
    path('post_url_tamanioscantidades/', views.post_tamanioscantidades, name='post_tamanioscantidades'),
]

views.py:

def index(request):
    treasures = Treasure.objects.all()
    form = TreasureForm()
    tamanioscantidades_form = TamaniosCantidadesForm()
    return render(request, 'main_app/index.html', {'treasures': treasures,
                                                   'form': form,
                                                   'tamanioscantidades_form': tamanioscantidades_form})



def post_tamanioscantidades(request):
    tamanioscantidades_form = TamaniosCantidadesForm()
    if tamanioscantidades_form.is_valid():
        tamanioscantidades_form.save(commit = True)
    return HttpResponseRedirect('/')

html:

<div class="row">
                <form action="post_url_tamanioscantidades/" method="post">
                    {% csrf_token %}
                    {{ tamanioscantidades_form.as_p }}
                    <input type="submit" value="Submit"/>
                </form>

            </div>

1 个答案:

答案 0 :(得分:3)

def post_tamanioscantidades(request):
    tamanioscantidades_form = TamaniosCantidadesForm()
    if tamanioscantidades_form.is_valid():
        tamanioscantidades_form.save(commit = True)
    return HttpResponseRedirect('/')

此方法会创建一个空白的TamaniosCantidadesForm,它无效,因此永远不会保存。

您可能想要执行类似TamaniosCantidadesForm(request.POST)的操作,以使用提交的数据实际填写表单。