2012-03-12 24 views
7

Tôi đã thay đổi rất nhiều trong số models.py của mình, bao gồm xóa nhiều trường và đổi tên một vài lớp. schemamigration --auto hoạt động tốt, nhưng cố gắng migrate đã ném một loạt lỗi.Làm cách nào để "bỏ ẩn" một ứng dụng khỏi miền Nam (Django)?

Tất cả mã của tôi hiện đang được phát triển nên tôi không bận tâm quá nhiều đến việc mất dữ liệu. Vì vậy, tôi muốn miền Nam "vô hiệu hóa" hoặc "quản lý" một ứng dụng để tôi có thể xây dựng lại tất cả các bảng với syncdb một lần nữa.

Hoặc tôi có thể xóa tất cả danh sách di chuyển và thực hiện lại schemamigration --initial.

Trả lời

11

Có, chỉ cần xóa di chuyển và chạy lại schemamigration --initial. Bạn nên làm điều đó anyways như là khóa học bình thường trước khi chuyển sang sản xuất. Nếu bạn đã đi vào sản xuất ít nhất một lần, đừng xóa tất cả các di chuyển - chỉ những thứ bạn đã tạo trong chu kỳ phát triển hiện tại và sau đó chạy schemamigration --auto để chỉ có một lần di chuyển thay vì nhiều lần di chuyển.

FWIW, để "hủy chuyển đổi" một ứng dụng bằng cách sử dụng miền Nam, bạn chỉ xóa thư mục "di chuyển", nhưng trong trường hợp này, không cần thiết.

CẬP NHẬT

Nó được chỉ ra rằng nếu bạn có đã di cư ứng dụng của bạn, và bạn xóa tất cả các cuộc di cư và tạo ra một cái mới duy nhất, Nam sẽ phàn nàn về cuộc di cư vẫn còn trong cơ sở dữ liệu. Quy trình thực tế bạn nên tuân theo là:

  1. Lùi lại trước khi di chuyển mới nhất bạn đã tạo trong chu kỳ phát triển hiện tại. Ví dụ: nếu bạn đã ở mức 0005 và bạn đã tạo ba lần di chuyển mới cho công việc phát triển mà bạn đang làm (hiện tại là 0008), bạn sẽ quay lại 0005. Nếu tất cả các di chuyển là mới, bạn quay lại zero:

    python manage.py migrate yourapp zero 
    
  2. Xóa tất cả các di chuyển bạn sắp hợp nhất. Trong ví dụ trên, điều đó sẽ là 0006, 0007 và 0008 hoặc cho một ứng dụng mới, mọi thứ trong thư mục di chuyển nhưng __init__.py.

  3. Tạo di chuyển mới để bao gồm di chuyển bạn vừa xóa. Nếu đó là ứng dụng mới, hãy sử dụng --initial hoặc nếu đó là ứng dụng đã tồn tại từ trước, hãy sử dụng --auto.

    python manage.py schemamigration --initial yourapp 
    
  4. Di chuyển

    python manage.py migrate yourapp 
    
+0

Ah ok, cảm ơn cho lời giải thích. Mã để xóa di chuyển là gì? – hobbes3

+3

Chỉ cần xóa tệp. Không có lệnh nào - chỉ là cách bình thường bạn xóa mọi thứ. –

+0

Ah ok, tôi đã cố gắng tìm một lệnh xóa từ tài liệu hướng dẫn phía nam lol. Cảm ơn rất nhiều. – hobbes3

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