2017-06-30 78 views
0

我试图使用Django将数据输入到Mysql数据库。用户通过addSubscriber.html页面输入所需数据以保存在数据库中,但输入的数据不保存在数据库中。每当我检查Mysql表(在这种情况下是'Subscribers'表)时,表是空的。我应该安装mysql-connecter吗?Django save()方法不会将数据插入到我的Mysql数据库中

这里是我的文件: views.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) 

models.py

from __future__ import unicode_literals 
from django.db import models 


class Subscribers(models.Model): 
    name = models.CharField(max_length=120) 
    area = models.CharField(max_length=30) 
    phoneNumber = models.CharField(max_length=10) 
    installationCost = models.CharField(max_length=10) 
    billNumber = models.CharField(max_length=100, unique=True) 

addSubscriber.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 %} 

urls.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) 
+0

你可以po这里的'DATABASES'设置? – Arun

+0

由于objects.create保存了对象本身,因此对Subs.save()的调用可能已过时。 https://docs.djangoproject.com/en/1.11/ref/models/querysets/#create – tback

回答

1

那么你不需要在视图中所有这些额外的东西,因为你正在使用的形式,为什么使用createsave

只是尝试这个form.is_valid

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

如果我不使用'form.cleaned_data'将不会保存我输入的加密形式的数据? –

+0

是的,它会,只需尝试一次,让我知道你看到了什么 – Exprator

+0

显示相同的错误。我尝试了@Arun给出的解决方案,并且发布了应用它后得到的错误。请看看它。 –

2

内由于使用的两个数据库,用于保存实体应指定的数据库来保存指定

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.

+0

我认为它的工作,但仍然数据库有一些问题。 'django.db.utils.IntegrityError:UNIQUE约束失败:当我尝试'python manage.py migrate'时显示dashboard_subscribers.billNumber'# –

+0

@ManishOjha:尝试https:// stackoverflow。com/a/34650891/6619424 – Arun

+0

我刚刚删除了unique = True和应用makemigrations并迁移,但是每当我使用python manage.py迁移时,错误都是一样的 –

相关问题