[英]How to use django-filter package for foreign key fields in Django?
[英]How to use widgets in django-filter fields?
想要將小部件"class":"form-control"
為 django-filter 字段。
過濾器.py
from django_filters import FilterSet,DateFilter,CharFilter,DateFromToRangeFilter
from django_filters.widgets import RangeWidget,CSVWidget,DateRangeWidget
from django import forms
from .models import Blog
class BlogFilter(FilterSet):
start_date = DateFilter(field_name="created_at",lookup_expr='gte',label='From date',
widget=DateFromToRangeFilter(attrs={
'placeholder':'YYYY/MM/DD',
'class':'form-control'
})
)
end_date = DateFilter(field_name="created_at",lookup_expr='lte',label='To date')
blog_name = CharFilter(field_name="blog_name",lookup_expr='icontains',label='Blog Name',
widget=TextWidgets(attrs={
'class':'form-control'
})
)
class Meta:
model = Blog
fields = ('category','status','user')
也嘗試在元類中編寫小部件,但沒有奏效。
哪個小部件用於CharFilter
? (就像我們在 Django 表單中使用forms.TextInput(attrs={'class':'form-control'}
)
哪個小部件用於DateFilter
?
我這樣做的方法是使用模板過濾器。
所以在過濾器的模板中我會做這樣的事情;
{% for field in filter.form %}
{{ field|htmlattributes:"class: form-control" }}
{% endfor %}
過濾器就是這樣做的;
from django import template
register = template.Library()
@register.filter
def htmlattributes(value, arg):
""" Allows adding of attributes to tagged form elements. """
attrs = value.field.widget.attrs
components = arg.split(',')
for string in components:
key, values_string = string.split(':')
values = values_string.strip()
if attrs.get(key):
values = attrs.get(key) + ' ' + values
attrs.update({key: values})
rendered = str(value)
return rendered
鑒於您的評論...您需要加載模板標簽/過濾器,就像我假設您已經完成的靜態等。
只需在模板頂部放置一個{% load x %}
htmlattributes
從您放置的任何位置加載htmlattributes
。
要了解如何編寫自己的模板標簽和過濾器,可以在此處找到文檔; https://docs.djangoproject.com/en/3.1/howto/custom-template-tags/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.