使用Django在sqlite db中保存数据

时间:2018-04-16 08:20:16

标签: python django web

我正面临使用Django将数据保存到我的sqlite数据库的问题。 当我访问127.0.0.1/personal/makeentry-->页面显示表单,但是当我在输入详细信息后单击提交时,detils不会保存在db中。

以下是代码 model.py

from django.db import models


class Account(models.Model):
    accountId = models.IntegerField(primary_key=True,unique=True, 
    blank=False, null=False, auto_created=True)
    accountName = models.CharField(max_length=100)
    countryName = models.CharField(max_length=100)
    marketName = models.CharField(max_length=100)
    msdmName = models.CharField(max_length=100)
    deliveryManagedFrom = models.CharField(max_length=100)
    location = models.CharField(max_length=100)

    def __str__(self):
        return self.accountName

admin.py

from django.contrib import admin
from .models import Account

# Register your models here.

class AccountAdmin(admin.ModelAdmin):
    list_display = ['accountId', 'accountName','countryName', 'marketName', 
    'msdmName','deliveryManagedFrom','location']


admin.site.register(Account, AccountAdmin)

forms.py

from django import forms
from . models import Account
from django.forms import ModelForm

class AccountForm(forms.Form):
    accountName = forms.CharField(label="Account Name", max_length=100)
    countryName = forms.CharField(label="Country Name", max_length=100)
    marketName = forms.CharField(label="Market Name", max_length=100)
    msdmName = forms.CharField(label="MSDM Name", max_length=100)
    deliveryManagedFrom = forms.CharField(label="Delivery Managed From", max_length=100)
    location = forms.CharField(label="Location", max_length=100)

class AccountForm(ModelForm):
    class Meta:
        model = Account
        fields = ['accountName','countryName', 'marketName', 'msdmName', 'deliveryManagedFrom', 'location']

views.py

from django.shortcuts import render
from django.views import generic
from .models import Account
from .forms import AccountForm


def index(request):
    return render(request, 'personal/home.html')


# generic view to fetch the data then show in a list
class IndexView(generic.ListView):
    # a name to refer to the object_list(to be used in the index.html)
    context_object_name = 'account_list'
    template_name = 'personal/index.html'

    def get_queryset(self):
        return Account.objects.all()


# generic view to show the details of a particular object
class DetailsView(generic.DetailView):
    model = Account
    template_name = 'personal/detail.html'

def makeentry(request):
    if request.method == 'POST':
        form = AccountForm(request.POST)

        if form.is_valid():
            accountName = request.POST.get('Account Name', '')
            countryName = request.POST.get('Country Name', '')
            marketName = request.POST.get('Market Name', '')
            msdmName = request.POST.get('MSDM Name', '')
            deliveryManagedFrom = request.POST.get('Delivery Managed From', '')
            location = request.POST.get('Location', '')

        account = Account(accountName=accountName, countryName=countryName, marketName=marketName, msdmName=msdmName, deliveryManagedFrom=deliveryManagedFrom, location=location)
        account.save()

        form = AccountForm()
        return render(request, 'personal/makeentry.html', {'form': form})


    else:
        form = AccountForm()
        return render(request, 'personal/makeentry.html', {'form': form})

makeentry.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Account Entry</title>
</head>
<body>
    <form action="{% url 'makeentry' %}" method="post">

    {% csrf_token %}
   {{ form }}
    <input type="submit" value="Submit">
    </form>


</body>
</html>

detail.html

{% if account_list %}
   <table>
      <tr>
         <td> Account Name </td>
         <td> Country Name </td>
         <td> Market Name </td>
         <td> MSDM Name </td>
         <td> Delivery Managed From </td>
         <td> Location </td>
      </tr>
      {% for account in account_list %}
      <tr>
         <td>{{ account.accountName }}</td>
         <td>{{ account.countryName }}</td>
         <td>{{ account.marketName }}</td>
         <td>{{ account.msdmName }}</td>
         <td>{{ account.deliveryManagedFrom }}</td>
         <td>{{ account.location }}</td>
      </tr>
      {% endfor %}
   </table>
{% endif %}

1 个答案:

答案 0 :(得分:0)

我认为你正在努力实现这一目标。您有FormModelForm同名。您应该只能使用ModelForm。如果您希望通过ModelForm签出ModelForm覆盖默认小部件,则需要传递属性。我的经验是设置action=“”并让视图处理重定向成功。

def make_entry(request):

if request.POST:
    form = AccountForm(request.POST)

    if form.is_valid():
        new_form = form.save()
        return redirect('where-you-want-to-redirect ',
            # View current saved info or change to what you want to show
                          pk=new_form.pk)