gpt4 book ai didi

forms - django-filter 更改默认表单外观

转载 作者:行者123 更新时间:2023-12-02 21:04:13 25 4
gpt4 key购买 nike

我用过图书馆django-filter它默认支持自己的过滤器形式。我在模板中使用 {{filter.form}} 将其打印出来。有没有一种方法可以根据我自己的需要配置和自定义它,这样我就不会使用“Φίλτρο”这个词,而是使用其他的东西?

enter image description here

最佳答案

我也遇到过这个问题,我的解决方案如下:

过滤器.py:

from django import forms
from django.utils.translation import ugettext as _
from django.forms.utils import flatatt
from django.contrib.auth.models import User
from .models import Zone, Location, Note, Price, Item, Unit, Category
import django_filters

class PriceFilter(django_filters.FilterSet):
STATUS_CHOICES = (
(0, _('Pending')),
(1, _('Approved')),
(2, _('Deleted')),
)

location = django_filters.ModelChoiceFilter(queryset=Location.objects.all(), widget=forms.Select(attrs={'class': 'form-control form-control-sm'}))
item = django_filters.ModelChoiceFilter(queryset=Item.objects.all(), widget=forms.Select(attrs={'class': 'form-control form-control-sm'}))
user = django_filters.ModelChoiceFilter(queryset=User.objects.all(), widget=forms.Select(attrs={'class': 'form-control form-control-sm'}))
status = django_filters.ChoiceFilter(choices=STATUS_CHOICES, widget=forms.Select(attrs={'class': 'form-control form-control-sm'}))
date = django_filters.DateFromToRangeFilter(widget=django_filters.widgets.RangeWidget(attrs={'class': 'datepicker form-control form-control-sm', 'placeholder': 'YYYY-MM-DD'}))
class Meta:
model = Price
fields = ('location', 'item', 'unit', 'date', 'status', 'user', 'approved', )

views.py:

from django.shortcuts import get_object_or_404, render, redirect
from django.urls import reverse
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
from django.views import generic, View
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.db.models import Count
from .models import Zone, Location, Note, Price, Item, Unit, Category
from .forms import NoteForm
from .filters import PriceFilter
...
class IndexView(generic.ListView):
template_name = 'price/index.html'

def get(self, request):
price_list = Price.objects.all().order_by('-date').annotate(num_notes=Count('note'))
price_filter = PriceFilter(request.GET, queryset=price_list)
paginator = Paginator(price_filter.qs, 30)
page = request.GET.get('page')
try:
prices = paginator.page(page)
except PageNotAnInteger:
prices = paginator.page(1)
except EmptyPage:
prices = paginator.page(paginator.num_pages)

index = paginator.page_range.index(prices.number)
max_index = len(paginator.page_range)
start_index = index - 5 if index >= 5 else 0
end_index = index + 5 if index <= max_index - 5 else max_index
page_range = paginator.page_range[start_index:end_index]

return render(request, self.template_name, {
'prices': prices,
'filter': price_filter.form,
'page_range': page_range,
})

index.html:

{% extends "base/base.html" %}
{% load i18n %}
{% load mptt_tags %}
{% block content %}

<div class="card border-light mb-3">
<div class="card-header">{% trans 'Filter' %}</div>
<div class="card-body">
<form method="get">
<div class="form-row">
<div class="form-group col-md-2">
<label for="inputEmail4" class="col-form-label">{% trans 'Item' %}</label>
{{ filter.item }}
</div>
<div class="form-group col-md-2">
<label for="inputEmail4" class="col-form-label">{% trans 'Location' %}</label>
{{ filter.location }}
</div>
<div class="form-group col-md-2">
<label for="inputEmail4" class="col-form-label">{% trans 'Author' %}</label>
{{ filter.user }}
</div>
<div class="form-group col-md-3">
<label for="inputEmail4" class="col-form-label">{% trans 'Date' %}</label>
<div class="input-group mb-3 mb-sm-0">
{{ filter.date }}
</div>
</div>
<div class="form-group col-md-2">
<label for="inputEmail4" class="col-form-label">{% trans 'Status' %}</label>
{{ filter.status }}
</div>
<div class="form-group col-md-1">
<label for="inputEmail4" class="col-form-label">{% trans 'Actions' %}</label>
<button type="submit" class="btn btn-sm btn-primary">{% trans 'Filter' %}</button>
</div>
</div>
</form>
</div>
</div>

您可以像 Django 的表单一样使用过滤器,但它也有一些特定的小部件。我建议你检查文档: https://django-filter.readthedocs.io/en/develop/ref/filters.html#widget

关于forms - django-filter 更改默认表单外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36871987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com