【问题标题】:save data to database using django使用 django 将数据保存到数据库
【发布时间】:2013-02-28 05:41:30
【问题描述】:

views.py

def addbook(request): 
    if request.POST:
        book_form = BookForm(request.POST)
    author_form = AuthorForm(request.POST)
        if (book_form.is_valid() and author_form.is_valid()):
        log.debug("test....")
            book=book_form.save()
            author=author_form.save()
        author.book=book
        author.save()

        return redirect('/index/')
    else:
    book_form=BookForm()
        author_form=AuthorForm()
        return render_to_response('addbook.html',{'form':book_form,'form':author_form},context_instance=RequestContext(request))

forms.py

from django import forms
from django.forms import ModelForm
from myapp.models import Book,Author


class AuthorForm(ModelForm):

    class Meta:
        model = Author

        fields=['author_id','first_name','last_name','email','age']        


class BookForm(ModelForm):

    class Meta:
        model = Book

        fields=['book_id','book_name','publisher_name','author']        

models.py

from django.db import models

class Author(models.Model):
    author_id = models.AutoField(primary_key=True)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()
    age=models.IntegerField()

    class Meta:
    db_table=u'Author'

    def __unicode__(self):
        return u"%d %s %s %s %d" % (self.pk, self.first_name, self.last_name, self.email,self.age)


class Book(models.Model):
    book_id=models.AutoField(primary_key=True,unique=True)
    book_name=models.CharField(max_length=30)
    publisher_name=models.CharField(max_length=40)
    author=models.ForeignKey(Author)

    class Meta:
        db_table = u'Book'

    def __unicode__(self):
        return u'%d %s %s' % (self.pk, self.book_name, self.publisher_name)

templates.html

<div align="center">

  <form action="/addbook/" method="post">
     {% csrf_token %}
    {{ book_form.as_p }}
    {{ author_form.as_p }}
    <input type="submit" value="submit">
    </form>

这里我使用作者作为foriegnkey。在表单中,我已经为数据库中的所有字段提供了字段。当我单击提交按钮时,它会显示字段以及作者字段。这里 author 表中的 author_id 指向 book 表中的 author_id。在 views.py 中我们如何实现它。

我希望以这种方式将数据保存到数据库中。我也更改了模板。

【问题讨论】:

  • 不使用表格怎么保存

标签: django django-forms django-templates django-views


【解决方案1】:

models.py

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()
    age = models.IntegerField()

    def __unicode__(self):
        return "{0} {1} {2} {3} {4}".format(
            self, self.first_name, self.last_name, self.email, self.age)

class Book(models.Model):
    book_name=models.CharField(max_length=30)
    publisher_name=models.CharField(max_length=40)
    author=models.ForeignKey(Author)

    def __unicode__(self):
        return "{0} {1} {2}".format(
            self.pk, self.book_name, self.publisher_name)

forms.py

class AuthorForm(ModelForm):
    class Meta:
        model = Author     

BookFormset = inlineformset_factory(Author, Book, 
    fields=('book_name', 'publisher_name'), extra=1, 
    can_delete=False) 

views.py

def addbook(request):
    form = AuthorForm()
    book_formset = BookFormset(instance=Author())

    if request.POST:
        form = AuthorForm(request.POST)
        if form.is_valid():
            author = form.save()
            book_formset = BookFormset(request.POST, instance=author)
            if book_formset.is_valid():
                book_formset.save()
            return redirect('/index/')

    return render_to_response('addbook.html',{
        'form': form, 'formset': book_formset
    },context_instance=RequestContext(request))  

模板

<div align="center">
    <tr>
        <form method="POST"> 
            {% csrf_token %} 
            <h5>Author:</h5>
            {{ form.as_p }}

            <h5>Book:</h5>
            {{ formset.as_p }}
            <input type="submit" value="submit">
        </form>
    </tr>
</div>

【讨论】:

  • 这没关系,但是我正在使用上面提到的两个模型,如果上面的逻辑错误,如何保存两个表数据,请帮助我使用新模型。我正在通过 Django Doc 学习 django,但实际上我并不清楚这件事。请给我一个答案 - 谢谢
  • 是的,我知道你接下来会问我这个问题。因为我在您的代码结构中看到了它。我的问题是你想一次保存一本书和一个作者吗?
  • 是的,你说的是正确的。我的要求是书和作者的详细信息一次。
  • 您不必创建author_idbook_id。 Django 在创建的每个模型中自动创建该 id。你看到我上面的代码了吗,我更正了你的模型代码
  • 以上答案对我有用
猜你喜欢
  • 1970-01-01
  • 2017-05-13
  • 2017-03-06
  • 2016-11-22
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
相关资源
最近更新 更多