0

djangoモデルのSQL挿入/更新に問題があります。私は公式チュートリアルを行っています。第5章には、著者、書籍、出版社のテーブルを含む簡単なデータベースがあります。Authorテーブルには、first_name、last_name、emailの3つのフィールドがあります。Bookテーブルには、name、publisherなどのフィールドと、Authorテーブルと多対多の関係にあるauthorsフィールドもあります。今、私は手動でやろうとしています。django管理アプリが舞台裏で何をしているのか。特定の本に関連付けられている著者を追加または更新したい。

私はこのように始めました(シェル段階で):

from mysite.models import Book, Author

new_author1 = 'John Doe' # that first_name and last_name exists in Author table
new_author2 = 'Jane Doe' # that first_name and last_name exists in Author table    
b = Book.objects.get(pk=2) # a book with id 2 exists in a Book table
b.authors = (new_author1,new_author2) # ?? trying to add/associate authors names with a selected book (pk=2)
b.save()

これはもちろん機能しておらず、何が欠けているのかわかりません

4

1 に答える 1

2

文字列のみを使用して著者を本に関連付けることはできません。最初にデータベースから実際のAuthorオブジェクトを取得する必要があります。次に、それらをBookに関連付けることができます。Django ORMは、文字列に基づいて魔法のようにオブジェクトを見つけることはありません。文字列のどの部分が名または姓であるか、または文字列が他のフィールドとは対照的に作成者名を参照していることを知る方法はありません。Authorオブジェクトを取得するには、次のようなことを行う必要があります。

new_author1 = Author.objects.get(first_name__exact='John', last_name__exact='Doe')

これは、コメントにあるように、JohnDoeがすでに作成されていることを前提としています。そうでない場合は、次のようなものを使用してAuthorオブジェクトを作成する必要があります。

new_author1 = Author.objects.create(first_name='John', last_name='Doe')

(私はモデルコードを持っていないので、これは最も論理的な設定を想定しています)。

于 2012-12-13T14:01:28.590 に答える