2013-04-15 37 views
15

Tôi sẽ đơn giản hóa một chút tình huống. Giả sử tôi có một mô hình gọi là Lab.Thêm tập lệnh jQuery vào giao diện quản trị Django

from django.db import models 

class Lab(models.Model): 
    acronym = models.CharField(max_length=20) 
    query = models.TextField() 

Trường query gần như luôn luôn giống với trường acronym. Do đó, tôi muốn trường query được tự động điền sau khi nhập văn bản vào trường acronym trong giao diện quản trị Django. Nhiệm vụ này phải được thực hiện bởi một kịch bản lệnh jQuery.

Vì vậy, nếu tôi lấy ví dụ: bạn muốn thêm phòng thí nghiệm mới vào cơ sở dữ liệu thông qua giao diện quản trị Django. Bạn nhấp vào nút thêm và bạn truy cập vào biểu mẫu trống với hai trường. Bạn tự điền vào trường acronym với giá trị như ABCD và sau đó trường query sẽ được hoàn thành về mặt phương diện với giá trị giống nhau, có nghĩa là ABCD.

Tôi nên tiếp tục như thế nào?

Trả lời

35

Để thêm phương tiện truyền thông cho người quản trị bạn chỉ có thể thêm nó vào lớp Truyền thông meta của lớp admin của bạn, ví dụ:

admin.py

class FooAdmin(admin.ModelAdmin): 
    # regular stuff 
    class Media: 
     js = (
      '//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js', # jquery 
      'js/myscript.js',  # project static folder 
      'app/js/myscript.js', # app static folder 
     ) 

admin.site.register(Foo, FooAdmin) 

Mind các dấu phẩy nếu bạn chỉ có một tệp được bao gồm, vì nó phải là một bộ tuple. Bạn cũng có thể chọn tham gia css theo cách này.

Quản trị viên đã có (phiên bản cũ hơn) của jquery được bao gồm. Để tắt nó để sử dụng thêm video này vào phía trên cùng của tập tin 'myscript':

if (!$) { 
    $ = django.jQuery; 
} 

Để giải quyết vấn đề của bạn, tôi sẽ extend the admin. Bạn có thể thêm sự kiện js vào bất kỳ nút DOM nào để kích hoạt cuộc gọi ajax trong tệp myscript của bạn đến chế độ xem quản trị viên chính xác để xử lý.

+2

Điều này có thể đã thay đổi vì đó là một câu hỏi cũ, nhưng như của Django 1.8.1, css được chỉ định làm từ điển với khóa là phương tiện mục tiêu và giá trị là tuple đường dẫn như trên. Sử dụng dấu phẩy để nhắm mục tiêu nhiều phương tiện hoặc 'tất cả' nếu nó không cụ thể. –

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