2013-07-17 32 views
8

Tôi có một ứng dụng (chúng ta hãy gọi nó là MyApp) trong một dự án Django 1.5. MyApp định nghĩa một mô hình người dùng tùy chỉnh (MyUser). Dự án sử dụng một ứng dụng khác (AnotherApp) tham chiếu đến MyUser. Các trường tham chiếu MyApp trong AnotherApp.Django phụ thuộc vòng tròn phía nam

Mọi thứ đều hoạt động tốt trên máy tính xách tay phát triển của tôi. Tôi đang cố gắng triển khai dự án của mình trên máy chủ và khi tôi chuyển sang bước di chuyển, MyApp không thành công do phụ thuộc vào AnotherApp và AnotherApp không thành công trên MyApp (tôi đã thử di chuyển ứng dụng độc lập). Cả hai đều không thành công trong lần di chuyển đầu tiên tương ứng của chúng (0001)

Running migrations for myapp: 
- Migrating forwards to 0017_auto__blah_blah. 
> myapp:0001_initial 
FATAL ERROR - The following SQL query failed: ALTER TABLE "myapp_mymodel_othermodel" ADD CONSTRAINT "othermodel_id_refs_id_ae052c6d" FOREIGN KEY ("othermodel_id") REFERENCES "anotherapp_othermodel" ("id") DEFERRABLE INITIALLY DEFERRED; 
The error was: relation "anotherapp_othermodel" does not exist 

Error in migration: myapp:0001_initial 
DatabaseError: relation "anotherapp_othermodel" does not exist 


Running migrations for anotherapp: 
- Migrating forwards to 0008_blah_blah. 
> anotherapp:0001_initial 
FATAL ERROR - The following SQL query failed: ALTER TABLE "anotherapp_othermodel" ADD CONSTRAINT "creator_id_refs_id_cff6fecf" FOREIGN KEY ("creator_id") REFERENCES "myuser" ("id") DEFERRABLE INITIALLY DEFERRED; 
The error was: relation "myuser" does not exist 

Error in migration: anotherapp:0001_initial 
DatabaseError: relation "myuser" does not exist 

Bất kỳ ý tưởng nào?

+0

Có một (đóng) vé cho vấn đề này (http://south.aeracode.org/ticket/390) có thảo luận tốt về chủ đề. –

Trả lời

11

Dường như có sự phụ thuộc vòng tròn thực sự ở đây. Bạn có thể phá vỡ nó khá dễ dàng, mặc dù: Di chuyển việc tạo ra các bảng m2m trong MyApp để di chuyển riêng biệt. Cách dễ nhất để làm như vậy, có thể là sao chép 0001_initial.py vào một tên mới, sau đó loại bỏ các khối cho bảng m2m (tiến lên và lùi lại!) Trong bản gốc và xóa mọi thứ khác trong bản sao.

Bản sao phải được đặt tên sao cho nó được đặt hàng giữa 0001_initial và 0002_whatever - giả sử, 0001_initial2.py; và nó sẽ phụ thuộc vào ("AnotherApp", "0001_initial") - mà, đến lượt nó, sẽ phụ thuộc vào ("MyApp", "0001_initial").

+1

Hoàn hảo! Tôi đã kết thúc bằng cách sử dụng needed_by trong lần di chuyển đầu tiên cho MyApp, sau đó phụ thuộc vào việc di chuyển thứ hai cho MyApp. Điều này cho phép tôi thiết lập các phụ thuộc mà không cần phải sửa đổi AnotherApp (được phát triển ở nơi khác) – askvictor

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