cuốn sách gpt4 ai đã làm

Thay đổi tên ứng dụng di chuyển Django (dự án sự kiện)

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 10:03:45 25 4
mua khóa gpt4 Nike

Vì vậy...tôi đã thực hiện rất nhiều nghiên cứu về vấn đề này...có câu trả lời, nhưng không có câu trả lời đầy đủ hoặc đầy đủ. Tôi có một "dự án" Django mà tôi đang thực hiện và đang sản xuất, trong đó, vì một lý do ngu ngốc nào đó, ứng dụng "chính" được gọi là "Trang". Vấn đề của tôi bây giờ là thêm tầng lửng... chứa một mô-đun con mezzanine.pages (dường như là bắt buộc.... nhưng tôi khá chắc chắn rằng mình cần nó).

mezzanine.pages dường như xung đột với "trang"...

Bây giờ... trang của tôi chứa một số mô hình không hề tầm thường, bao gồm một mô hình mở rộng Người dùng (tham chiếu một-một) và nhiều tham chiếu đến các bảng ứng dụng khác (may mắn thay, chỉ có ngoại lệ, ForeignKey). Nó cũng có quyền quản lý/lệnh và khoảng 20 lần di chuyển trong lịch sử của chính nó.

Tôi tập trung xem liệu tôi có phải thay đổi trang thành mypages hay có một lộ trình khác (có vẻ như việc thay đổi mezzanine.pages là sai).

Cho bạn biết, dự án hiện đang có trên Django 1.8, vì vậy câu trả lời ưu tiên bao gồm việc di chuyển.

câu trả lời hay nhất

Tôi đã nghiên cứu câu hỏi này kể từ khi nó được đăng và câu trả lời thực sự là những gì tôi tổng hợp từ nhiều nguồn, bao gồm cả các bài đăng trên Stack Exchange khác.

Vì vậy... trước khi bắt đầu sử dụng Django, mọi thứ đã thay đổi. Sau phiên bản 1.7, phần "nhập cư" đã được nội hóa và các bài đăng bao gồm từ "Miền Nam" nói về thế giới trước phiên bản 1.7. Ngoài ra, trong trường hợp của tôi, sự phức tạp liên quan đến các vấn đề di chuyển, vì dự án đã hoạt động và có dữ liệu thực trong quá trình sản xuất.

Có một số bài đăng, bao gồm đoạn mã GITHub, thảo luận về quá trình di chuyển bảng từ ứng dụng này sang ứng dụng khác. Đây thực chất là một phần của quy trình, nhưng có một số bài viết nói rằng để thực hiện việc này như một quá trình "di chuyển", bạn cần đặt Migration.py của mình vào một ứng dụng khác. Thậm chí có những ứng dụng được tạo ra cho mục đích này.

Cuối cùng, tôi quyết định thay đổi ứng dụng liên quan bằng cáchlabelcủaỨng dụngtrong lớpapps.pyđể giải quyết vấn đề này. Trong trường hợp của tôi, tôi đã thay đổi "trang" thành "phppages", nhưng tên thư mục ứng dụng của tôi vẫn là trang. Điều này hiệu quả với tôi vì ứng dụng phụ "trang" của ứng dụng lửng đã quay trở lại thư viện python và không có xung đột trong hệ thống tệp. Nếu đó không phải là trường hợp của bạn, bạn có thể sử dụnglabelMột giải pháp khác.

Vì vậy... từng bước một, chương trình của tôi sẽ làtrangĐổi tên thànhtrang php.


hiện hữuapps.pyĐược tạo trong thư mục contrang. Đặt vào:

lớp PagesConfig(AppConfig):
tên = "trang"
nhãn = "phppage"
Verbose_name = "Trang mũ tím"


Chìa khóa làlabel, nó sẽ thay đổi mọi thứ.
hiện hữu__init__.pythư mục contrangvào, cho vàodefault_app_config = "pages.apps.PagesConfig"
trong của bạnsettings.py, thay đổi ứng dụngCÀI ĐẶT_APPSMục nhập thay đổi thành'pages.apps.PagesConfig', ...
Bạn cần chỉnh sửa tất cả các lần di chuyển trong bước này. hiện hữusự phụ thuộcdanh sách, bạn cần thêm'trang'Thay đổi thành'phppage'. hiện hữuKhóa ngoại, bạn cũng cần di chuyển mọi thứ trong mỗi tệp di chuyển từ'trang.Một cái gì đó'Thay đổi thành'phppages.Something'. hiện hữutrang/giảm thiểu/nnnn_*.pyTìm những thứ này bên dưới
nếu được thông quatừ pages.models nhập cái gì đóĐể tham chiếu khóa ngoại trong các mô-đun khác, sau đó sử dụngNgoại khóa(Cái gì đó), rất hữu ích cho điểm dừng này. Nếu sử dụngForeignKey('pages.Something'), bạn cần thay đổi các tham chiếu này thànhForeignKey('phppages.Something'). Tôi cho rằng các trích dẫn tương tự khác đều giống nhau.
Đối với 4 bước tiếp theo (7, 8, 9 và 10), tôi đã xây dựngpagestophpages.sqlvà thêm nó vàotrangtrong thư mục con. Đây không phải là điều tiêu chuẩn của Django, nhưng mọi bản sao thử nghiệm của cơ sở dữ liệu và mọi bản sao sản xuất đều yêu cầu các bước giống nhau.
CẬP NHẬT django_contecnt_type SET app_label='phppages' WHERE app_label='pages';
CẬP NHẬT django_migrations SET app='phppages' WHERE app='pages';
Bây giờ...trong cơ sở dữ liệu của bạn (tôi là PostgreSQL) sẽ có một loạt bảng bắt đầu bằng "trang". Bạn cần phải liệt kê tất cả. Trong PostgreSQL, ngoại trừ các bảng, mọiTrường tự độngTất cả đều có trình tự. Đối với mỗi cấu trúc bảngTHAY ĐỔI BẢNG pages_something ĐỔI TÊN THÀNH phppages_something;cho mỗi chuỗiTHAY ĐỔI TRÌNH TỰ pages_something_id_seq ĐỔI TÊN THÀNH phppages_something_id_seq;
Có lẽ bạn nên sao lưu cơ sở dữ liệu của mình. Bạn có thể cần phải thử điều này một vài lần. Chạy các tập lệnh SQL thông qua trình bao cơ sở dữ liệu. Lưu ý rằng tất cả các thay đổi khác có thể được lan truyền thông qua kiểm soát nguồn (git, svn, v.v.). Bước cuối cùng phải được chạy trên mỗi cơ sở dữ liệu.


Rõ ràng là bạn cần phảitrangtrang phpThay đổi nội dung của bạn. Bạn có thể có nhiều bảng có trường tự động và bảng có thể không được đặt tênthứ gì đó.

Một điều khác cần lưu ý về mặt quy trình là đây có thể là một điểm khó khăn trong quá trình phát triển khi mọi thứ cần phải được đồng bộ hóa. Vì chúng tôi đang chỉnh sửa quá trình di chuyển và thay đổi tên, bạn cần phải dừng quá trình phát triển để mọi thứ sắp được thay đổi (hộp dev, hộp kiểm tra, hộp dàn dựng, hộp sản xuất... và tất cả cơ sở dữ liệu của nó) đã được đã thay đổi. Trong cùng một sửa đổi và kiến ​​​​trúc. YMMV.

Bằng cách sử dụnglabelcủaứng dụng lớp họcCác trường cũng có thể giải quyết vấn đề này. Tôi chọn phương pháp này để thay đổi tên thư mục vì nó ít thay đổi hơn. Tôi chọn không thay đổitênfield vì điều này không hiệu quả với tôi. YMMV.

Tôi phải nói rằng tôi hơi thất vọng vì ứng dụng/trang của tôi xung đột với mezzanine.pages. Có vẻ như một số lý do là do việc sử dụngtrangđiều khoản (và tôi không thấy giải pháp nào tốt ở đó cả). Tôi nghĩ điều này không có ý nghĩa gì và tương đương với một cái gì đó như "nhập trang từ tầng lửng dưới dạng mpage". Khả năng đặt bí danh cho các ứng dụng đã nhập (không nói về các ứng dụng trong cây tệp của riêng tôi). Tôi nghĩ điều đó có thể thực hiện được nếu tôi hấp thụ ứng dụng vào cây tệp riêng của nó --- nhưng dường như đó cũng không phải là hành vi được chấp thuận.

Về thay đổi tên ứng dụng di chuyển python - Django (dự án sự kiện), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/42059381/

25 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress