2012-11-13 19 views
6

Tôi đang làm việc thông qua hướng dẫn Django sau khi đã cài đặt nguồn phát triển của Django cùng với PostgreSQL từ nguồn và mọi thứ cần thiết từ nguồn. Tôi đang cố gắng làm mọi thứ với python3 thay vì python trên Ubuntu 12.10.`__unicode __()` bổ sung không hoạt động trong ứng dụng thăm dò cơ bản trong hướng dẫn Django

Mọi thứ dường như diễn ra tốt đẹp cho đến khi tôi tham gia hướng dẫn trong đó chúng tôi phải xác định lại __unicode__() để trả lại kết quả hợp lý khi chúng tôi yêu cầu đối tượng.all() từ một bảng. Nó không hoạt động chút nào. Tôi quyết định thử __str__() và nó đã hoạt động!

Tuy nhiên, hướng dẫn giải thích chúng tôi không được định nghĩa lại __str__(). Vì vậy, có gì sai với cài đặt của tôi rằng __unicode__() không hoạt động khi __str__() hoạt động? Các phương pháp khác từ công việc hướng dẫn tốt.

+0

Bạn nên biết rằng Python3 chưa được hỗ trợ chính thức ở Django. –

+0

Phiên bản 1.6 sẽ chính thức hỗ trợ python3 và tôi đang sử dụng 1,6 alpha. –

Trả lời

8

Strings được xử lý khác nhau trong Python 3 vs 2.

Trong 2, __str__() byte trở lại, trong khi __unicode__() trở ký tự. Trong 3, __str__() hiện trả về các ký tự, vì các chuỗi bây giờ là nguyên bản unicode, và __unicode__() không tồn tại. Nếu bạn thực sự cần hành vi 2 cũ cho __str__(), tôi tin rằng hiện tại là __bytes__().

Câu trả lời ngắn gọn, gắn bó với __str__() nếu bạn đang sử dụng Python 3 và nhận ra rằng hướng dẫn Django nêu rõ chúng được viết cho 2.x, vì vậy sẽ có sự khác biệt.

+1

Cảm ơn! Tôi nghĩ rằng nó có thể là một cái gì đó nhiều hơn bởi vì những người hơn một năm trước đây đã có cùng một vấn đề và không ai trả lời câu hỏi của họ đúng (điều này đã được trên các nhóm google cho người dùng django). Sẽ được tốt đẹp nếu hướng dẫn thêm ý kiến ​​cho sự khác biệt python3 mặc dù. –

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