2012-03-30 24 views
5

Tiêu đề có thể gây nhầm lẫn, nhưng hãy để tôi giải thích:Khi lưu trữ số điện thoại ở Django, tôi có nên lưu trữ chúng dưới dạng số nguyên hoặc sử dụng django.contrib.localflavor không?

Hiện tại khi tôi đang lưu trữ số điện thoại có các số nguyên như 5554441234. Sau đó, trong mẫu của tôi, tôi sẽ "định dạng" số thành một cái gì đó như 555-444-1234.

Tôi nhận ra trong số localflavor của Django, có một số US phone number field kiểm tra xem chuỗi có ở định dạng XXX-XXX-XXXX hay không. Vì vậy, câu hỏi của tôi là tôi nên nhập số điện thoại làm chữ số thô sau đó định dạng nó trong mẫu hoặc tôi nên nhập số điện thoại theo cách được định dạng bằng cách sử dụng localflavor?

Nếu tôi chọn tùy chọn thứ hai, giới hạn định dạng XXX-XXX-XXXX có áp dụng ngay cả ở cấp độ database API hoặc trong trang quản trị Django không?

Trả lời

9

Lưu trữ chúng như đã nhập, chỉ dải khoảng trắng xung quanh nếu cần. Cách người dùng định dạng số của nó lưu trữ thông tin ngữ nghĩa mà bạn không muốn mất bằng cách bình thường hóa nó. Ở Hoa Kỳ, định dạng XXX-XXX-XXXX rất phổ biến, nhưng các miền địa phương khác sử dụng các định dạng hoàn toàn khác nhau. Ví dụ: nơi tôi sống ở một số định dạng phổ biến là: XX-XXX XXX XX, XXX/XXX XX XX, +46(0)70-XXX XX XX và cứ như vậy là quảng cáo.

Số được hiển thị cho người dùng phải ở định dạng giống như đã nhập, nếu không người đó sẽ nghĩ rằng nó bị nhòe hoặc thậm chí không nhận ra số đó nếu được định dạng theo kiểu khác với người dùng . Xem thêm phần thảo luận này: http://discuss.fogcreek.com/dotnetquestions/default.asp?cmd=show&ixPost=6079&ixReplies=6

+0

Tôi làm cách nào để kiểm tra trong quản trị viên Django? Có cách nào để gắn thẻ 'CharField' để thực thi xác thực' XXX-XXX-XXXX' trên cấp 'models.py' không? – hobbes3

+3

Vấn đề là bạn nên ** không ** cố gắng thực thi nó. Đây không phải là doanh nghiệp của trang web của bạn để cho người dùng biết họ nên định dạng số điện thoại của họ như thế nào. –

2

Nếu bạn đang sử dụng khuôn khổ biểu mẫu (ví dụ: trong quản trị viên Django), việc xác thực đầu vào sẽ được thực hiện ở cấp ứng dụng. Vì vậy, để nhập số điện thoại vào biểu mẫu, bạn phải định dạng số điện thoại thành XXX-XXX-XXXX.

Ở cấp cơ sở dữ liệu, nó chỉ là CharField, do đó cơ sở dữ liệu không thực hiện bất kỳ kiểm tra nào cho định dạng.

+1

Nếu bạn muốn xác trên 'Cấp models.py', bạn có thể đính kèm chức năng của bạn cho' tín hiệu pre_save' cho mô hình. Trong hàm đó, bạn có thể sử dụng 'localflavor' để xác thực đầu vào. – gakhov

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