Mặc định MultiWidget sẽ truyền tất cả các thuộc tính (attrs) cho các widget con. Vì vậy RangeFilter và DateFromRangeFilter sẽ hiển thị 2 input với các thuộc tính giống nhau. Bài viết dưới đây sẽ hướng dẫn cách thiết lập thuộc tính (placeholders) riêng cho từng input.
Khi sử dụng RangeFilter như dưới đây thì 2 trường nhập dữ liệu (input) sẽ hiển thị giống nhau đều là from
1 2 3 4 5 6 |
lat = django_filters.RangeFilter( label='Laditude', widget=RangeWidget( attrs={'placeholder':'from'}, ) ) |
Để 2 trường nhập liệu hiển thị riêng: Ví dụ: from, to. Chúng ta cần định nghĩa 1 lớp mới thừa kế từ lớp RangeWidget như dưới đây
1 2 3 4 5 6 7 8 |
class MyRangeWidget(django_filters.widgets.RangeWidget): def __init__(self, from_attrs=None, to_attrs=None, attrs=None): super(MyRangeWidget, self).__init__(attrs) if from_attrs: self.widgets[0].attrs.update(from_attrs) if to_attrs: self.widgets[1].attrs.update(to_attrs) |
Sau đó, sử dụng như dưới đây:
1 2 3 4 5 6 7 8 |
# Filter by lat lat = django_filters.RangeFilter( label='Laditude', widget=MyRangeWidget( from_attrs={'placeholder':'from'}, to_attrs={'placeholder':'to'}, ) ) |
Chúc các bạn thành công !
Mình là một lập trình viên tự do với hơn 10 năm kinh nghiệm. Mình chuyên về Web scraping, Web automation, Python, Django