2010-03-20 38 views
5

Ứng dụng của tôi có hai loại nút: nút cha có thể giữ các nút con đệ quy. Hãy nghĩ về nó giống như hệ thống sau khi nhận xét trong SO, nhưng các nhận xét có thể đệ quy:Cách đúng để mô hình mối quan hệ đệ quy trong Django

parent_1 
    child_11 
    child_12 
    child_121 
    child_13 
parent_2 
    child_21 
    child_211 
     child_2111 

Quan trọng cần lưu ý rằng các nút cha có các thuộc tính và hành vi khác với các nút con.

Trừ đệ quy Tôi sẽ có các mô hình sau:

class Parent(models.Model): 
    # fields ... 

class Child(models.Model): 
    parent = models.ForeignKey(Parent) 
    # other fields ... 

Nhưng đệ quy phức tạp này. Cách chính xác (và có lẽ là hiệu quả nhất) của mô hình hóa mối quan hệ này ở Django là gì?

Trả lời

11
+0

Daniel, bạn có thể giải thích tại sao tôi cần một mô-đun bên ngoài để triển khai mô hình khá đơn giản này không? –

+0

+1 để chỉ tôi đến django-treebeard. Nested Sets implementation = bộ nhớ thời gian tuyệt vời cho tôi. – cethegeek

+2

@Yuval, đó là vấn đề hiệu quả của việc lưu trữ dữ liệu phân cấp trong cơ sở dữ liệu. MPTT là một trong những cách tiếp cận phổ biến hơn được sử dụng hiện nay. Cả hai dự án mà Daniel đề cập có thêm thông tin về chủ đề cũng như các liên kết đến nhiều thông tin hơn nữa. Đây là một trong các bài viết được liên kết: http://articles.sitepoint.com/print/hierarchical-data-database – istruble

1

Bạn có thể sử dụng số Generic Relation và chỉ thêm xác thực trong phương thức save() (hoặc trong xác thực tín hiệu hoặc biểu mẫu) để đảm bảo đối tượng là phiên bản của một đối tượng hay khác không?

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