मैं अपने प्रोजेक्ट में django_filters का उपयोग कर रहा हूं और उनमें से एक DateFromToRangeFilter है। यह फ़िल्टर आपके टेम्पलेट में दो इनपुट फ़ील्ड उत्पन्न करता है, आलंकारिक रूप से - "से" और "टू"।
इन क्षेत्रों के लिए समान विशेषता सेट करने में कोई समस्या नहीं है। उदाहरण के लिए:
end = django_filters.DateFromToRangeFilter(
widget=django_filters.widgets.RangeWidget(
attrs={"placeholder": "yyyy-mm-dd"}))
लेकिन मैं यह नहीं समझ सकता कि अलग-अलग प्लेसहोल्डर्स (या प्रत्येक फ़ील्ड के लिए कोई अन्य विशेषताएँ) कैसे सेट करें। जैसे "फ़ील्ड से" के लिए "प्रारंभ तिथि दर्ज करें" और "" के लिए फ़ील्ड के लिए "अंतिम तिथि दर्ज करें"।
क्या कोई मदद कर सकता है?
उत्तर:
जवाब के लिए 3 № 1डिफ़ॉल्ट रूप से MultiWidget
सभी पास करता है attrs
प्रत्येक उपविजेता को। इसे बायपास करने के लिए, आपको उप-वर्ग करना होगा RangeWidget
और अलग प्रदान करते हैं attrs
मापदंडों में से प्रत्येक के लिए from/to
विजेट।
कुछ इस प्रकार है:
class MyRangeWidget(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)
उत्तर № 2 के लिए 1
मैं उत्पादन में नीचे दो अलग-अलग प्लेसहोल्डर्स का उपयोग करता हूं।
import django_filters
from django_filters.widgets import RangeWidget, SuffixedMultiWidget
from jobsboard.models import Job
class DurationRangeWidget(SuffixedMultiWidget, RangeWidget):
suffixes = ["min", "max"]
def __init__(self, attrs=None):
super().__init__(attrs)
self.widgets[0].attrs.update({"placeholder": "from"})
self.widgets[1].attrs.update({"placeholder": "to"})
class JobsConsultantFilter(django_filters.FilterSet):
hirer = HirerFilter(name="hirer", max_length=255)
duration = django_filters.RangeFilter(name="duration", widget=DurationRangeWidget)
class Meta:
model = Job
fields = ["duration", "pay", "hirer", ]