1. Tạo tệp kê khai(manifest.json) – Đây là file chứa các thông tin cơ bản của Extension bao gồm: name: Tên của extension description: Mô tả ngắn gọn cho extension version: Phiên bản của extension. Mỗi khi có cập nhật cho extension, bạn nhất định phải thay đổi giá trị này thì extension của bạn mới có thể tự động…
Tác giả: Bùi Minh Vương
Phân biệt Union, Intersection and Difference trong phương thức trả về QuerySet
Bảng MyModel= { 1: ‘A’, 2: ‘B’, 3: ‘C’, 4: ‘D’, 1: ‘E’} Thực hiện truy vấn lấy dữ liệu: q1 = MyModel.objects.all() -> <QuerySet [<MyModel: A>, <MyModel: B>, <MyModel: C>, <MyModel: D>, <MyModel: E>]> q2 = MyModel.objects.filter(name__in=(‘A’,’B’)) -> <QuerySet [<MyModel: A>, <MyModel: B>]> q3 = MyModel.objects.filter(name__in=(‘C’,’D’)) -> <QuerySet [<MyModel: C>, <MyModel: D>]> – Union() sẽ trả kết hợp các kết quả trong…
Kiểm tra quyền trong ModelAdmin
Trong Django có các hàm kiểm tra: – ModelAdmin.has_view_permission(request, obj=None) Trả về True nếu đối tượng (obj) được phép xem, ngược lại trả về False. – ModelAdmin.has_add_permission(request, obj=None) Trả về True nếu được phép thêm đối tượng (obj), ngược lại trả về False. – ModelAdmin.has_change_permission(request, obj=None) Trả về True nếu được phép chỉnh sửa đối tượng (obj), ngược lại trả về False. – ModelAdmin.has_delete_permission(request, obj=None) Trả về…
Xử lí khi có sự khác biệt các fields trong Form Admin
Trường hợp Bảng ae_fonttype có các trường(id, name, order, font_type) Khi hiển thị(view) cần có các trường (name, font_type, font_list) font_list: là danh sách các font có cùng font_type được lưu ở ae_fonttype_font_list Khi thêm bản ghi mới(add) chỉ có(name, font_type) Model(models/font_type.py): class FontType(models.Model): class Meta: verbose_name = ‘フォントタイプ’ verbose_name_plural = ‘b.1 フォントタイプ一覧’ ordering = [‘order’] name = models.CharField(verbose_name=”名前”, null=True, blank=True, max_length=32)…
Download và zip nhiều file cùng lúc
Để thực hiện tính năng này, cần sử dụng thêm 2 thư viện: jszip & FileSaver https://github.com/Stuk/jszip https://github.com/eligrey/FileSaver.js Sử dụng: var zip = new JSZip(); zip.file(“Hello.txt”, “Hello Worldn”); var img = zip.folder(“images”); img.file(“smile.gif”, imgData, {base64: true}); zip.generateAsync({type:”blob”}).then(function(content) { // see FileSaver.js saveAs(content, “example.zip”); }); Để có thể dùng tính năng tải xuống trực tuyến sử dụng tùy chọn streamFiles zip.generateAsync({ type:…
Vô hiệu hóa Chrome tự động điền input password
Việc điền tự động của chrome có thể gây ảnh hưởng tới 1 input khác(tự động điền giá trị) khi có 1 input type=”password” Thay thành autocomplete=”new-password” trong trường hợp autocomplete=”off” và autocomplete=”false” không sử dụng được trong input type=”password”
Image và Font trong tcpdf
Hiển thị hình ảnh dạng base64 với writeHTML() Sử dụng dạng: $html = ‘<img width=”220″ height=”135″ src=”@’ . preg_replace(‘#^data:image/[^;]+;base64,#’, ”, $img_base64_encoded) . ‘”>’; Với $img_base64_encoded là dữ liệu hình ảnh dạng base64. Thêm kí tự ‘@’ để biểu thị theo luồng dữ liệu hình ảnh. Hiển thị font tiếng nhật trong file pdf. Trong thư viện font tcpdf có font mặc định ‘cid0jp’…