2011-09-19 4 views
8

Gần đây tôi đã bắt đầu sử dụng miền Nam để di chuyển trong dự án Django của tôi. Tất cả đã diễn ra tốt đẹp cho đến gần đây khi tôi gặp phải một vấn đề đặc biệt.Đơn đặt hàng di chuyển nào mà Nam theo dõi trên các ứng dụng khác nhau?

Tôi có hai ứng dụng trong dự án của mình, ví dụ: App-A và App-B. Một mô hình trong ứng dụng-A có khóa ngoài cho một mô hình trong ứng dụng-B. Khi tôi đã cố gắng xây dựng hệ thống của mình, tôi chạy syndb đã tạo tất cả các bảng auth_south_. Sau đó, tôi chạy migrate đã phát hiện lỗi. Khi nó cố gắng tạo mô hình từ App-A, tham chiếu đến một mô hình từ App-B, mô hình App-B không được di chuyển/tạo ra như vậy và do đó là lỗi.

Để giải quyết vấn đề này, trước tiên tôi phải di chuyển ứng dụng-B theo cách thủ công rồi đến Ứng dụng A. Tôi có làm gì sai ở đây không? Làm thế nào là Nam phải biết thứ tự di chuyển trên các ứng dụng?

Cảm ơn.

Trả lời

16

Điều này giải thích nó https://south.readthedocs.io/en/latest/dependencies.html.

Migrations cho các ứng dụng được thoải mái 'n tất cả, nhưng khi bạn bắt đầu viết một dự án lớn , với rất nhiều ứng dụng, bạn nhận ra rằng mình có ngoại mối quan hệ quan trọng giữa các ứng dụng và làm việc ra những gì di cư tự sẽ cần được áp dụng cho mỗi ứng dụng chỉ gây đau đớn.

May mắn thay, chúng tôi cũng có vấn đề này, vì vậy miền Nam có một hệ thống phụ thuộc. Bên trong di chuyển, bạn có thể tuyên bố rằng nó phụ thuộc vào việc có ứng dụng khác khi chạy một lần di chuyển nhất định trước; ví dụ, nếu ứng dụng của tôi “diễn đàn” phụ thuộc vào “Tài khoản” ứng dụng đã tạo ra lý lịch thành viên bảng của nó, chúng ta có thể làm:

# forum/migrations/0002_post.py class Migration: 

    depends_on = (
     ("accounts", "0003_add_user_profile"), 
    ) 

    def forwards(self): 

Sau đó, nếu bạn cố gắng và di chuyển đến hoặc vượt quá 0002_post trong diễn đàn ứng dụng, trước tiên, ứng dụng sẽ đảm bảo tài khoản được di chuyển ít nhất tối đa 0003_add_user_profile và nếu không sẽ di chuyển tài khoản đó cho bạn.

Các phụ thuộc cũng hoạt động ngược lại; Nam biết không hoàn tác việc di chuyển 0003_add_user_profile này cho đến khi nó hoàn tác di chuyển 0002_post .

Bạn có thể có nhiều phụ thuộc và tất cả các loại cấu trúc lập dị; có được, tuy nhiên, hai quy tắc:

Không phụ thuộc vòng tròn (hai hay nhiều cuộc di cư tuỳ theo từng khác) Không trở lên phụ thuộc trong cùng một ứng dụng (do đó bạn không thể làm cho 0002_post trong ứng dụng phụ thuộc vào diễn đàn 0003_room trong cùng một ứng dụng, hoặc là trực tiếp hoặc thông qua chuỗi phụ thuộc.

12

Miền Nam di chuyển ứng dụng theo thứ tự chúng xuất hiện trong nhóm INSTALLED_APPS trong settings.py. Vì vậy, chỉ cần chắc chắn rằng App-B đến trước App-A trong settings.py của bạn, và nó sẽ làm việc :)

+0

Chỉ cần bỏ phiếu vì điều này thực sự khá quan trọng. 'depends_on' và' needed_by' dường như chỉ kiểm soát việc di chuyển thực tế. chỉ mới bắt đầu với việc di chuyển, như trường hợp của tôi, South sẽ cố gắng tải dữ liệu ban đầu cho một ứng dụng sau khi quá trình di chuyển hoàn tất. chúng ta không có sẵn trước khi người khác cần nó và chạy vào các vấn đề chính nước ngoài. Tôi đã có thể giải quyết vấn đề này bằng cách sắp xếp lại các ứng dụng trong 'INSTALLED_APPS'.Miền Nam chạy ứng dụng theo thứ tự mà chúng đang ở trạng thái tạm dừng 'INSTALLED_APPS' để chạy bất kỳ phụ thuộc di chuyển nào. – jaywhy13