2011-09-26 2 views
5

Tôi có các mô hình sau đại diện cho sách và tác giả. Một cuốn sách có thể có nhiều tác giả và một tác giả có thể đã viết nhiều sách. Vì vậy, tôi đang sử dụng loại ManyToManyField của Django để liên kết hai mô hình với nhau.Mối quan hệ giữa nhiều mối quan hệ giữa nhiều mô hình

Tôi có thể thêm Book, bằng cách sử dụng Quản trị viên Django có thể và tạo một Author trong quá trình. Nhưng khi tôi xem Author Tôi vừa tạo nó không được liên kết với số Book. Tôi phải thiết lập rõ ràng mối quan hệ đảo ngược giữa cá thể Author và phiên bản Book.

Đó có phải là cách của nó hoặc tôi có thể làm điều gì đó khác biệt không?

Models.py

class Book(models.Model):  
    book_title = models.CharField(max_length=255, blank=False) 
    authors = models.ManyToManyField('Author', blank=True) 

class Author(models.Model): 
    author_first_name = models.CharField(max_length=255, blank=False) 
    author_last_name = models.CharField(max_length=255, blank=False) 
    books = models.ManyToManyField(Book, blank=True) 

Trả lời

7

Bạn không cần hai ManyToManyField định nghĩa bởi vì các lớp mô hình mà không có sự ManyToManyField có liên quan đến người kia thông qua các mối quan hệ ngược lại. Xem: https://docs.djangoproject.com/en/dev/topics/db/queries/#many-to-many-relationships

Nếu bạn định nghĩa hai lớp mô hình như:

class Book(models.Model):  
    book_title = models.CharField(max_length=255, blank=False) 
    authors = models.ManyToManyField('Author', blank=True) 

class Author(models.Model): 
    author_first_name = models.CharField(max_length=255, blank=False) 
    author_last_name = models.CharField(max_length=255, blank=False) 

sau đó cho bất kỳ Author dụ a, a.book_set.all() bao gồm những cuốn sách mà tác giả đã viết (hoặc là đồng tác giả).

+0

Ahhh! Thật tuyệt vời. Không biết nó hoạt động theo cách đó. Cảm ơn nhiều! – Raj