4

ビュー.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))

フォーム.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 では、それをどのように実装できますか。

この方法でデータをデータベースに保存することを期待しています。テンプレートも変更しました。

4

1 に答える 1

13

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)

フォーム.py

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

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

ビュー.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>
于 2013-03-12T16:18:36.800 に答える