python - theme - django-admin createsuperuser
Paginator para modelos en línea en django admin (4)
¿Has comprobado el atributo raw_id_fields ? Creo que podría resultarte útil.
Tengo este modelo de django simple que consiste en un sensor y valores para el sensor específico. El número de valores por piranómetro es alto (> 30k). ¿Es posible de alguna manera paginar los PyranometerValues
de PyranometerValues
por un día específico o aplicar un paginador a la vista en línea del administrador?
class Pyranometer(models.Model):
name = models.CharField(max_length=75)
class PyranometerValues(models.Model):
timestamp = models.DateTimeField()
value = models.DecimalField(max_digits=10,decimal_places=6)
sensor = models.ForeignKey(''Pyranometer'')
Bueno, tal vez los filtros generados dinámicamente ayuden:
https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter
Además, el administrador tiene una buena consulta de tipo GET como en:
localhost: 8000 / admin / pyranometervalues /? value = 10.0
Podrías especificar la fecha como:
admin / pyranometervalues /? timestamp_ year = 2011 & timestamp _month = 10 & timestamp__day = 13
y así sucesivamente ... Lamentablemente, no conozco una forma más breve de realizar esta consulta en admin. ¿Algunas ideas? :)
EDIT: esto es solo para reducir su consulta, no tiene nada que ver con la paginación;)
Como django-admin es principalmente una cuestión de plantillas (solo es necesario para redefinir plantillas para i18n algunas partes de django-admin-tools), tengo una idea.
Los módulos de paginación son para Django, como linaro-django-pagination o la paginación sin fin, que proporcionan etiquetas de plantilla para paginar cualquier cosa, dado que es iterable.
Si pudiera encontrar la plantilla encargada de mostrar los modelos en línea, podría copiarla en su proyecto, luego intente agregarle un {% load pagination_tags%} y paginar las inlines.
No lo he probado ni lo he pensado muy a fondo, pero, a excepción de la validación, no veo cómo podría fallar. Solo prueba y dinos.
Si alguien requiere esto, encontré esta implementación agradable (aunque descrita como "bastante intrincada") de una subclase de TabularInline
paginación en este comentario de un problema de django-suit .
Para Django 1.6 se requiere un cambio de plantilla y una subclase de esta clase PaginationInline
:
from django.contrib import admin
from django.contrib.admin.views.main import ChangeList
from django.core.paginator import EmptyPage, InvalidPage, Paginator
class InlineChangeList(object):
can_show_all = True
multi_page = True
get_query_string = ChangeList.__dict__[''get_query_string'']
def __init__(self, request, page_num, paginator):
self.show_all = ''all'' in request.GET
self.page_num = page_num
self.paginator = paginator
self.result_count = paginator.count
self.params = dict(request.GET.items())
class PaginationInline(admin.TabularInline):
template = ''admin/edit_inline/tabular_paginated.html''
per_page = 20
def get_formset(self, request, obj=None, **kwargs):
formset_class = super(PaginationInline, self).get_formset(
request, obj, **kwargs)
class PaginationFormSet(formset_class):
def __init__(self, *args, **kwargs):
super(PaginationFormSet, self).__init__(*args, **kwargs)
qs = self.queryset
paginator = Paginator(qs, self.per_page)
try:
page_num = int(request.GET.get(''p'', ''0''))
except ValueError:
page_num = 0
try:
page = paginator.page(page_num + 1)
except (EmptyPage, InvalidPage):
page = paginator.page(paginator.num_pages)
self.cl = InlineChangeList(request, page_num, paginator)
self.paginator = paginator
if self.cl.show_all:
self._queryset = qs
else:
self._queryset = page.object_list
PaginationFormSet.per_page = self.per_page
return PaginationFormSet