我的models.py:
class Author(models.Model):
name = models.CharField(max_length=100)
books = models.ManyToManyField(
"Book", related_name="books", blank=True
)
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ManyToManyField(Author)
在Django admin我首先創建了一個實體Author,但沒有分配給他任何Book:

然后我創建了一個新的Leo TolstoyBook并指定為:Author

在 Django shell 中,我可以訪問Book's Author:
>>> Book.objects.filter(title="War and Peace").first().author.first()
<Author: Leo Tolstoy>
但我無法訪問Author's Books:
>>> Author.objects.filter(name="Leo Tolstoy").first().books.all()
<QuerySet []>
該書也未在Admin視圖中分配:

我想訪問Author'sBooks以及Books
在Author'sAdmin視圖中顯示。
uj5u.com熱心網友回復:
你只需要一個ManyToManyField。您還應該傳遞on"books"因為這是 Django 將用于它自動添加到實體的多對多管理器屬性的名稱。related_nameBook.authorsAuthor
有關更多資訊,請參閱Django 檔案中的示例。
當ManyToManyField在關系的兩邊創建 a 時,Django 正在后臺創建 book 和 author 表之間的兩個關聯表。對一個表的更改不會影響另一個表。
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(
Author, related_name="books", blank=True
)
uj5u.com熱心網友回復:
我建議你這樣做:
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ManyToManyField(Author, related_name="books",blank=True)
你需要一個 ManyToManyField,然后 django 會在book和author表之間創建兩個關聯表。對一張表的更改不會影響另一張表。您可以在 django 檔案中看到有關多對多關系的資訊。我已洗掉了您的books領域我的答案,因為您已經創建的實體Author,但你沒有指派他的“書”,你已經創建了一個Book實體與給予title,并author在你的Book模型。這樣您的任何資料都不會被洗掉。我還在您的模型中添加related_name了您的author欄位,Book因為當您嘗試獲取與作者相關的書籍(例如“Loe Tolstoy”)時,您可以通過以下方式獲得:
Author.objects.get(name="Leo Tolstoy").books.all()
我希望你能理解我試圖解釋的內容。如果出現任何錯誤,請在評論框中給出確切的錯誤讓我知道。謝謝。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412659.html
標籤:
