2014-07-23 16 views
5

Tôi đã đọc nhiều bài viết về OneToOneField, ManyToManyField và Foreign Key là gì nhưng chúng không rõ ràng lắm. Tôi rất mới để Django và lập trình python, hiện đang cố gắng để phát triển các mô hình. Ai đó có thể giải thích cho tôi bằng ngôn ngữ đơn giản, tốt nhất là với ví dụ, họ là ai?Django OneToOneField, ManyToManyField, Khóa ngoài

Trả lời

8

Hãy tưởng tượng một cơ sở dữ liệu, mà các cửa hàng bộ sưu tập sách của bạn:

from django.db import models 

class Place(models.Model): 
    address = models.CharField(max_length=50) 
    country = models.CharField(max_length=50) 

class Publisher(models.Model): 
    name = models.CharField(max_length=30) 
    place = models.OneToOneField(Place, primary_key=True) 

class Author(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=40) 

class Book(models.Model): 
    title = models.CharField(max_length=100) 
    publisher = models.ForeignKey(Publisher) 
    authors = models.ManyToManyField(Author) 

One-to-many/Ngoại chính

Mỗi Book đã một Publisher, nhưng một Publisher có thể đã xuất bản nhiều cuốn sách. Vì vậy, họ đang ở trong mối quan hệ một-đến-nhiều (book-to-publisher).

One-to-one

Mỗi Publisher nằm ở một Place, và mỗi Place chỉ có thể giữ một Publisher. Vì vậy, họ đang ở trong một mối quan hệ một-một. Bạn chỉ có thể đã đặt thông tin Place (addresscountry) với mô hình Publisher trong một bảng, nhưng đôi khi được ưu tiên có các mô hình riêng biệt. Ví dụ: nếu bạn không biết số Place cho mỗi Publisher, bạn không cần chiếm nhiều không gian với các hàng trống.

Nhiều-nhiều

Mỗi Book cũng có một hoặc nhiều Author s. Tuy nhiên, một Author có thể đã viết nhiều Book s, do đó, họ đang ở trong một mối quan hệ nhiều-nhiều.

Nếu bạn vẫn cần một số hướng dẫn, tôi khuyên bạn nên xem the model chapter of the Django Book.

+1

Câu trả lời hay. Tôi cũng sẽ đề nghị OP để đọc về các mối quan hệ cơ sở dữ liệu, khi họ áp dụng trực tiếp các trường Django này. Hãy thử điều này - http://code.tutsplus.com/articles/sql-for-beginners-part-3-database-relationships--net-8561 –

+0

Điều này xóa tất cả mọi thứ cho tôi! Cảm ơn nhiều! Xin lỗi, tôi không có đủ danh tiếng để trả lời câu trả lời của bạn =/ – Rjzheng

+0

@Rjzheng Chúc mừng bạn. (: – Banana

Các vấn đề liên quan