Can Django admin site seleziona le voci in base a un intervallo di date personalizzato, ovvero utilizzando due DateFields
con AdminDateWidget
? So che ci sono le proprietà date_hierarchy
e list_filter
, ma non sembrano molto utili quando ci sono molte voci di DB e basta filtrare gli articoli con la query esatta date__gte
e date__lte
.Filtro per intervallo di date personalizzato in admin Django
risposta
Nota: ho scritto questa risposta nel 2009, quando la funzionalità richiesta non era disponibile in Django come API pubblica. Per Django 1.4+, vedi le altre risposte.
Questa funzionalità non è fornita per quanto ne so, ma è possibile crearla da soli.
In primo luogo, è possibile filtrare gli elementi utilizzando date__gte
e date__lte
come ottenere gli argomenti nell'URL.
Per esempio
/admin/myapp/bar/?date__gte=2009-5-1&date__lt=2009-8-1
visualizzerà tutti gli oggetti a barre con date a maggio, giugno o luglio 2009.
Poi, se si sovrascrive il file admin/change_list.html modello, è possibile aggiungere widget per le date di inizio e fine , che naviga nell'URL richiesto.
Punta di cappello a Daniel's answer ad un altro SO questione, che mi ha insegnato sull'utilizzo di parametri di filtro QuerySet come ottenere gli argomenti.
La classe DateRangeFilter()
trovato alla https://github.com/runekaagaard/django-admin-filtrate fa proprio questo :)
non sembra funzionare per Django 1.4 –
Non testato su 1.4 quindi probabilmente non. Penso che ci sia una nuova API del filtro di amministrazione in 1.4 che potrebbe scuotere le cose. –
ho finito attuazione qualcosa di simile:
# admin.py
class FooAdmin(MyModelAdmin):
def changelist_view(self, request, extra_context=None):
extra_context = extra_context or {}
try:
extra_context['trade_date_gte'] = request.GET['date__gte']
except:
pass
try:
extra_context['trade_date_lte'] = request.GET['date__lte']
except:
pass
return super(FileNoteAdmin, self).changelist_view(request, extra_context)
# change_list.html
{% extends "admin/admin/change_list.html" %}
{% load i18n admin_static admin_list %}
{% load url from future %}
{% load admin_urls %}
{% block filters %}
{% if cl.has_filters %}
<div id="changelist-filter">
<h2>{% trans 'Filter' %} </h2>
<h3>By trade date</h3>
<link href="/media/css/ui-lightness/jquery-ui-1.8.19.custom.css" rel="stylesheet" type="text/css"/>
<script src="/media/js/jquery/jquery-min.js"></script>
<script src="/media/js/jquery/jquery-ui-1.8.19.custom.min.js"></script>
<script>
$(function() {
$("#trade_date_gte").datepicker({ dateFormat: 'yy-mm-dd'{% if trade_date_gte %}, defaultDate: '{{ trade_date_gte }}'{% endif %} });
$("#trade_date_lte").datepicker({ dateFormat: 'yy-mm-dd'{% if trade_date_lte %}, defaultDate: '{{ trade_date_lte }}'{% endif %} });
});
function applyDateFilters() {
qs = location.search;
if (qs.charAt(0) == '?') qs = qs.substring(1);
var qsComponents = qs.split(/[&;]/g);
new_qs = [];
for (var index = 0; index < qsComponents.length; index ++){
var keyValuePair = qsComponents[index].split('=');
var key = keyValuePair[0];
var value = keyValuePair[1];
if(key == 'trade_date__gte' || key == 'trade_date__lte' || key == '') {
continue;
} else {
new_qs[index] = key + '=' + value;
}
}
if($("#trade_date_gte").val() != '') {
new_qs[new_qs.length] = 'trade_date__gte=' + $("#trade_date_gte").val();
}
if($("#trade_date_lte").val() != '') {
new_qs[new_qs.length] = 'trade_date__lte=' + $("#trade_date_lte").val();
}
window.location = '?' + new_qs.join("&");
}
</script>
<p>
From: <br /><input type="text" id="trade_date_gte" value="{{ trade_date_gte|default:'' }}" size="10"><br />
To: <br /><input type="text" id="trade_date_lte" value="{{ trade_date_lte|default:'' }}" size="10">
</p>
<ul>
<li><a href="#" onclick="javascript:applyDateFilters();">Apply date filters</a></li>
</ul>
{% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %}
</div>
{% endif %}
{% endblock %}
La colonna data di essere filtrato è "trade_date".
ora ho finito per usare il filtro (un po 'su misura), come pure - non c'è ancora nulla là fuori in termini di django-admin-filtrato. Manca ancora il supporto 1.4 – kosta5
In django 1.4, è possibile l'utente list_filter. Prova:
from django.contrib.admin import DateFieldListFilter
class PersonAdmin(ModelAdmin):
list_filter = (
('date_field_name', DateFieldListFilter),
)
Questo darà alcuni intervalli built-in, ma funzionerà se si mette l'intervallo di date in url, come:
?date__gte=2009-5-1&date__lt=2009-8-1
Se avete bisogno di un selettore di data (come jQuery) , che è necessario estendere DateFieldListFilter. Ho inviato una patch a django-admin-filtrate, quindi, controlla lì presto.
Ora è possibile implementare facilmente i filtri di amministrazione personalizzati utilizzando le API standard di Django. Il giorno docs che nel list_filter
, è ora possibile aggiungere:
una classe che eredita da django.contrib.admin.SimpleListFilter, che è necessario fornire il titolo e parameter_name attributi per e sovrascrivere le ricerche e metodi set di query
E vanno avanti a demo (scorrere fino al secondo punto). L'ho usato io stesso per aggiungere filtri la cui relazione di base agli oggetti non è tramite gli attributi del modello, ma i risultati dei metodi su di essi, qualcosa che i filtri tradizionali non offrono.
perché il down-vote? – nemesisfixx
anzi, molto utile, tx – ptim
È possibile utilizzare questo up-to-date uno: https://github.com/tzulberti/django-datefilterspec.
è abbandonato il progetto – shredding
- 1. Filtro personalizzato in Django Admin su Django 1.3 o inferiore
- 2. filtro campo ForeignKey in Django Admin
- 3. Django utente personalizzato admin change_password
- 4. Active Admin Rails4 filtro personalizzato con Ransack
- 5. Django, il filtro per mese e anno specificato di date
- 6. Filtro admin Django su proprietà Chiave esterna
- 7. Interfaccia di Django Admin - Nome app personalizzato
- 8. Intervallo di date con il filtro Smart Table angolare
- 9. WMD in Django Admin?
- 10. Django admin list filter
- 11. Django admin: come ordinare colonna metodo personalizzato
- 12. Filtra per intervallo di date in SPARQL
- 13. elasticsearch intervallo di date intersezione
- 14. Pacchetto Admin Sonata: Intervallo DatePicker
- 15. Django Admin: Come faccio a filtrare su un campo intero per un intervallo di valori specifico
- 16. Intervallo di date JavaScript nell'intervallo di date
- 17. Gruppo per intervallo di date settimane/mesi intervallo
- 18. Django admin GenericForeignKey in linea
- 19. Come interrogare Cassandra per intervallo di date
- 20. Inserimento data europeo in Django Admin
- 21. Convenzione URL per intervallo di date
- 22. Django personalizzato in Admin, relazione "auth_user" non esiste
- 23. Interrogazione per intervallo di date nei binari
- 24. Dividi intervallo di date in blocchi dell'intervallo di date
- 25. Django Admin in Angularjs
- 26. django: using admin datepicker
- 27. Filtro intervallo geografico in NEST?
- 28. jQuery Validate (Intervallo di date)
- 29. Creazione di filtri personalizzati per list_filter in Django Admin
- 30. Django - filtro personalizzato per verificare se il file esiste
Grazie mille, caratteristica molto utile. –