2012-03-20 20 views
15

Chúng tôi có một số kiểu máy có người dùng là khóa ngoài. Nhưng với khoảng 25000 người dùng trong hệ thống của chúng tôi, có một chút khó khăn khi tìm ra người mà chúng tôi cần.Quản trị Django: Thay đổi hộp được chọn của các trường liên quan thành tự động hoàn thành

Có giải pháp nào ở đó tốt hơn hộp chọn không? Có thể tự động điền để chúng tôi có thể bắt đầu nhập tên người dùng/địa chỉ? Hay chỉ là một hộp tìm kiếm? Khi chuyển người dùng có liên quan cho các đối tượng này, nó sẽ ngày càng khó khăn hơn với 25000 người dùng chưa được phân loại.

Thậm chí chỉ cần thiết lập để sắp xếp người dùng theo tên người dùng sẽ hữu ích.

+0

Điều này có vẻ rất nóng: https://github.com/yourlabs/django-autocomplete-light – Paolo

Trả lời

21

Tôi gặp sự cố này và kết luận của tôi là sử dụng trường tự động điền thay thế. Nó hoạt động khá tốt trong hầu hết các trường hợp. Vấn đề duy nhất là khi bạn có nhiều mục nhập chủ yếu giống nhau. Ví dụ, trong trường hợp của bạn, nếu bạn gõ Robert cho tên và có một vài trăm Robert mục trong danh sách ...

Có rất nhiều ứng dụng mà thêm autocomplete cho người quản trị Django:

một ưu tiên của tôi là người cuối cùng. Nó được viết tốt, nó có thể được sử dụng với quản trị viên và bên ngoài quản trị viên, nó hoạt động với ManyToManyFields, ForeignKeyFields, CharFields, v.v.

Tôi đã thực hiện một số dự án cho khách hàng của tôi. phóng to) như ForeignKeyRawIdWidget.

+0

Đáng yêu .. Cảm ơn – CrazyGeek

4

Bạn có thể sử dụng ForeignKeyRawIdWidget từ django.contrib.admin.widgets. Nó ám chỉ mối quan hệ FK như một đầu vào với một nút nhỏ dọc theo bên trong đó trình bày một cửa sổ bật lên có thể tìm kiếm được.

5

Giải pháp out-of-the-box đơn giản nhất là thêm trường vào ModelAdmin 's raw_id_fields - sau đó bạn sẽ nhận được một cửa sổ bật lên mà bạn có thể sử dụng tính năng tìm kiếm/lọc tích hợp sẵn và kiểm soát phân trang để tìm và chọn đối tượng bạn đang theo dõi.

Nếu bạn thực sự muốn tự động hoàn thành, các câu trả lời khác sẽ cho bạn điểm khởi đầu hợp lý.

1

Tìm thấy một, tích hợp giải pháp rất thích hợp cho việc này: sử dụng filter_horizontal trong bạn quản lý cấu hình:

Giả sử bạn có SchoolStudent Model, với nhà trường có một mối quan hệ ManyToManyField đến một danh sách dài các sinh viên.

# model.py 
class School(models.Model): 
    ... 
    students = models.ManyToManyField(Student) 

Chỉ cần thêm video này vào SchoolAdmin của bạn:

# admin.py 
filter_horizontal = ('student',) 

Bạn sẽ nhận được sự sắp xếp này! enter image description here

2

Quản trị viên Django 2.0 có autocomplete built in. Xem

class QuestionAdmin(admin.ModelAdmin): 
    ordering = ['date_created'] 
    search_fields = ['question_text'] 

class ChoiceAdmin(admin.ModelAdmin): 
    autocomplete_fields = ['question'] 
Các vấn đề liên quan