0

models.py

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 Info'

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

    def books(self):
        return Book.objects.filter(author=self)

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 Name'

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

ビュー.py

def addbook(request):
    if request.POST:
        first_name = request.POST.get('first_name')
        last_name = request.POST.get('last_name')
        email = request.POST.get('email')
        age = request.POST.get('age')
    author = Author(first_name = first_name,last_name = last_name,email=email,age=age)
        author=author.save()
        book_name = request.POST.get('book_name')
        publisher_name = request.POST.get('publisher_name')
    #Book.author_id=author
        #author_id = author_id()
        book=Book.objects.create(book_name=book_name,publisher_name=publisher_name,author_id)
    book.save()
    return redirect('/index/')
    else:
        return render_to_response('addbook.html',context_instance=RequestContext(request))

index.html/templates

table border="0" cellpadding='8' cellspacing='10'>
    <tr>
        <td align="right" colspan="8"><a href="/addbook/">Add Book</a></td>
    </tr>

    <tr>
        <th>Book Id</>
    <th>Book name</th>
    <th>Publication name</th>
    <th>Author Id</th>
    <th>First Name</th>
    <th>Last Name</th>
    <th>E Mail</th>
    <th>Age</th>
    </tr>
    {% for book in books %}
    <tr>
       <td>{{ book.book_id }}</td>
       <td>{{ book.book_name }}</td>
       <td>{{ book.publisher_name }}</td>
       <td>{{ book.author_id }}</td>

       {% for author in authors %}  
         <td>{{author.first_name}} </td><td>{{author.last_name}}</td>
         <td>{{author.email}}</td>
         <td>{{author.age}}</td>
           {% endfor %}
             <td><a href="/editbook/{{ book.book_id}}">Edit</a></td>
             <td><a href="/deletebook/{{ book.book_id}}">Delete</a></td>
        {% endfor %}

ここで、Book クラスで "author" または author_id フィールドに外部キー値を割り当てる方法を教えてください。割り当て手順を教えてください。

4

2 に答える 2

2

問題はこれです:

author = Author(first_name = first_name,last_name = last_name,email=email,age=age)
author=author.save()

save()私はそうすべきだと信じていますが、実際には何も返しません。次のように単純に変更します。

author = Author(first_name = first_name,last_name = last_name,email=email,age=age)
author.save()
book.author = author
book.save()

これで、 に割り当てることができる作成者ができましたbook.author

また、私がここにいる間に、逆の関係について学ぶ必要があります。次のメソッドは必要ありません。

def books(self):
    return Book.objects.filter(author=self)

代わりにこれを行うことができるため:

author.book_set.all()
于 2013-03-04T11:17:51.737 に答える
1

整合性エラーは、Book テーブルの author_id 列に null 値が渡されるために発生します。この行を確認してくださいbook=Book.objects.create(book_name=book_name,publisher_name=publisher_name,author_id)

同じ著者IDをブックテーブルに挿入したい場合は、次のいずれかを使用できます

ジャンゴシグナル

または、いくつかの一意のパラメーター (電子メール ID 値など) を使用してクエリを実行して Author テーブルから最新の著者 ID を取得し、この ID を Books テーブルに渡す必要があります。

于 2013-03-04T10:04:41.377 に答える