2012-12-13 40 views
0

我有一個django模型sql插入/更新的問題。 我正在通過官方教程,並在第5章中有一個簡單的數據庫與作者, 書籍和出版商表。 作者表有3個字段:名字,姓氏,電子郵件 書籍表也有一些字段,如:姓名,出版商等,作者字段與作者表的多對多關係 。現在我正在嘗試手動執行,django管理員應用程序在幕後做了 。我想添加或更新與給定圖書相關的作者。Django多對多關係SQL更新字段

我已經開始喜歡這個(在殼級):

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() 

這當然是不工作的,我不知道我失蹤

回答

2

不能與作者聯繫起來只使用字符串的書籍。您必須先從數據庫中檢索實際的Author對象,然後才能將它們與Book關聯。 Django ORM不會神奇地根據字符串爲您找到對象。沒有辦法讓它知道字符串的哪一部分是名字或姓氏,或者該字符串是否完全引用了作者姓名,而不是其他字段。你需要做這樣的事情,以獲得作者的對象:

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

這是假設李四已經創建的,因爲它在你的評論說。如果不是這樣,你需要的東西,如創建Author對象:

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

(我沒有型號代碼,所以這是假設最合乎邏輯的設置)。

+0

好的......我錯過了基本知識。我也意識到我可以通過Author.pk字段獲得作者,如new_author1 = Author.objects.get(pk = 2),然後是b.authors.add(new_author1)。感謝您的迴應。 – Chris