2010-12-28 22 views
8

Tôi viết lại rất nhiều mô hình của mình và vì tôi chỉ chạy một máy chủ thử nghiệm, tôi làm ./manage.py đặt lại myapp để đặt lại các bảng db và mọi thứ đã được làm việc tốt.Django: lệnh tuôn ra không hoàn toàn rõ ràng cơ sở dữ liệu, đặt lại không thành công

Nhưng tôi đã cố gắng để làm điều đó thời gian này, và tôi nhận được một lỗi,

"Các lỗi đầy đủ: contraint owner_id_refs_id_9036cedd" của mối quan hệ "myapp_tagger" không tồn tại"

Vì vậy, tôi figured tôi sẽ chỉ Vì vậy, tôi đã làm ./manage.py tuôn ra sau đó đã làm một syncdb này đã không nâng cao một lỗi và xóa tất cả dữ liệu của tôi, tuy nhiên nó đã không cập nhật cơ sở dữ liệu kể từ khi tôi cố gắng truy cập bất kỳ đối tượng my_app của , tôi nhận được một cột không tìm thấy lỗi.Tôi nghĩ rằng tuôn ra đã được nghĩa vụ phải thả tất cả các bảng.Các syncdb nói rằng không có đồ đạc đã được thêm vào.Tôi giả định lỗi liên quan đến thực tế là tôi đã thay đổi mô hình trình gắn thẻ để có một khóa ngoại với một chủ sở hữu tên gắn với một đối tượng khác.

Tôi đã thử thêm related_name vào đối số ngoại tuyến và dường như không có gì hoạt động.

+0

oops, bỏ lỡ phần bạn đã đặt lại trước khi tuôn ra. bỏ qua câu trả lời của tôi: P –

Trả lời

13

I thought that flush was supposed to drop all tables.

No. Theo số documentation, manage.py flush không thả bảng. Thay vào đó, thực hiện như sau:

Returns the database to the state it was in immediately after syncdb was executed. This means that all data will be removed from the database, any post-synchronization handlers will be re-executed, and the initial_data fixture will be re-installed.

Như đã nêu trong chapter 10 of The Django Book trong "Thực hiện thay đổi đến một Schema Database" phần,

syncdb merely creates tables that don't yet exist in your database — it does not sync changes in models or perform deletions of models. If you add or change a model's field, or if you delete a model, you’ll need to make the change in your database manually.

Vì vậy, để giải quyết vấn đề của bạn, bạn sẽ cần một trong hai:

  1. Xóa cơ sở dữ liệu và cấp lại manage.py syncdb. Đây là quá trình mà tôi sử dụng khi tôi vẫn đang phát triển lược đồ cơ sở dữ liệu. Tôi sử dụng một fixture initial_data để cài đặt một số dữ liệu thử nghiệm, mà cũng cần phải được cập nhật khi lược đồ cơ sở dữ liệu thay đổi.
  2. Phát hành thủ công các lệnh SQL để sửa đổi lược đồ cơ sở dữ liệu của bạn.
  3. Sử dụng South.
+6

+1 lại: Nam. Thật tuyệt vời khi có thể thay đổi giản đồ mà không làm mất dữ liệu. –

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