Django save()方法不向Mysql数据库插入数据

2024-05-16 11:47:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试过使用Django将数据输入Mysql数据库。用户通过添加订阅服务器.html要保存在数据库中但输入的数据未保存在数据库中的页。每当我检查Mysql表(在本例中是“Subscribers”表)时,该表是空的。我应该安装mysql连接器吗?在

以下是我的档案: 视图.py在

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.views import generic
from .models import Subscribers
from .forms import addSubsForm



@login_required
def dashboard(request):
    user = request.user
    context = {'user': user}
    template = 'dashboard.html'
    return render(request, template, context)



@login_required
def addSubscriber(request):
    template = 'addSubscriber.html'
    if request.method == 'POST':
            form = addSubsForm(request.POST)
            if form.is_valid():
                name = form.cleaned_data['name']
                area = form.cleaned_data['area']
                phoneNumber = form.cleaned_data['phoneNumber']
                installationCost = form.cleaned_data['installationCost']
                billNumber = form.cleaned_data['billNumber']
                print name
                Subs = Subscribers.objects.create(name=name, area=area, phoneNumber=phoneNumber, installationCost=installationCost, billNumber=billNumber)
                Subs.save()
                return redirect('report')

    else:
            form = addSubsForm()

    return render(request, template, {'form': form})




@login_required
def report(request):
    context = locals()
    template = 'report.html'
    return render(request, template, context)

在模型.py在

^{pr2}$

在添加订阅服务器.html在

{%extends 'base.html'%}
{% load staticfiles %}
{% load crispy_forms_tags %}

{% block content %}



<div class="row">
    <div class="col-xs-7">

{% if form %}
<br>


      <form class="POST" action="." method="post">
          {% csrf_token %}

         {{ form|crispy }}
            <input type="submit" value="submit form" class="btn btn-primary"/>



      </form>

{% endif %}
    </div>

</div>
{% endblock %}

在网址.py在

from dashboard import views as dashboard_views
from profiles import views as profiles_views

from django.conf import settings
from django.conf.urls import url, include
from django.conf.urls.static import static
from django.contrib import admin


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', profiles_views.home, name='homepage'),
    url(r'^contact/$', profiles_views.contact, name='contact'),
    url(r'^dashboard/$', dashboard_views.dashboard, name='dashboard'),
    url(r'^dashboard/addSubscriber/$', dashboard_views.addSubscriber, name='addSubscriber'),
    url(r'^dashboard/userDetail/$', dashboard_views.userDetail, name='userDetail'),
    url(r'^dashboard/report/$', dashboard_views.report, name='report'),


    url(r'^account/', include('allauth.urls')),

]

# this statement says that: if in the settings file, DEBUG is true than use this static URL
if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Tags: djangonamefromimportreportformurlif
2条回答

好吧,在使用form时,您不需要在视图中使用所有这些额外的东西,为什么还要使用create和{}??在

只需在form.is_valid中尝试此操作

       if form.is_valid():
            f = form.save(commit=False)
            f.save(using='db2')
            return redirect('report')

由于您使用两个数据库,因此对于保存实体,您应该通过指定

Subs.save(using='db2')

根据Django documentation:

If you don’t specify using, the save() method will save into the default database allocated by the routers.

相关问题 更多 >