Admins.py configurados correctamente dados los cambios realizado en la base de datos

This commit is contained in:
adrigongv23 2026-03-06 21:21:27 +01:00
parent 99426f7335
commit e64a08326c
26 changed files with 416 additions and 34 deletions

View file

@ -1,13 +1,38 @@
from django.contrib import admin
from .models import Documento
from .models import Documento, Factura
@admin.register(Documento)
class DocumentoAdmin(admin.ModelAdmin):
list_display = ('titulo', 'categoria', 'tipo', 'temporada', 'subido_por', 'fecha_subida')
list_filter = ('temporada', 'categoria', 'tipo') # ¡Filtros laterales muy útiles!
search_fields = ('titulo', 'descripcion')
# Columnas principales
list_display = ('nombre', 'categoria', 'tipo', 'subido_por', 'fecha_subida')
# Esto hace que el campo "subido_por" se rellene solo con tu usuario al crear un doc
# Filtros por área técnica, tipo de documento y temporada del documento
list_filter = ('categoria', 'tipo', 'temporada')
# Buscador de documentos por su nombre o descripción
search_fields = ('nombre', 'descripcion')
# Para asignar a que temporada pertenece el documento
filter_horizontal = ('temporada',)
# Automatización: para rellenar el creador del nuevo documento de manera automática
def save_model(self, request, obj, form, change):
if not obj.subido_por:
obj.subido_por = request.user
super().save_model(request, obj, form, change)
@admin.register(Factura)
class FacturaAdmin(admin.ModelAdmin):
# Herncia de Documento
list_display = ('nombre', 'empresa', 'importe', 'categoria', 'subido_por', 'fecha_subida')
list_filter = ('categoria', 'temporada')
search_fields = ('nombre', 'empresa', 'descripcion')
filter_horizontal = ('temporada',)
# Mantenemos la misma automatización
def save_model(self, request, obj, form, change):
if not obj.subido_por:
obj.subido_por = request.user

View file

@ -0,0 +1,66 @@
# Generated by Django 6.0.2 on 2026-03-06 19:29
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('documentos', '0001_initial'),
('temporadas', '0002_temporada_miembros'),
]
operations = [
migrations.CreateModel(
name='Factura',
fields=[
('documento_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='documentos.documento')),
('empresa', models.CharField(max_length=100, verbose_name='Nombre de la empresa')),
('importe', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Importe (€)')),
],
options={
'verbose_name': 'Factura',
'verbose_name_plural': 'Facturas',
},
bases=('documentos.documento',),
),
migrations.AlterModelOptions(
name='documento',
options={'ordering': ['-fecha_subida'], 'verbose_name': 'Documento', 'verbose_name_plural': 'Documentos'},
),
migrations.RemoveField(
model_name='documento',
name='titulo',
),
migrations.AddField(
model_name='documento',
name='nombre',
field=models.CharField(default='Documento antiguo', max_length=100, verbose_name='Nombre del documento'),
preserve_default=False,
),
migrations.AlterField(
model_name='documento',
name='categoria',
field=models.CharField(choices=[('aerodinamica', 'Aerodinámica'), ('chasis', 'Chasis'), ('business', 'Business & Operations'), ('e_powertrain', 'E-Powertrain'), ('electronica', 'Electrónica'), ('sdf', 'SDF'), ('motor_transmision', 'Motor & Transmisión'), ('software', 'Software'), ('normativa', 'General / Normativa')], max_length=20),
),
migrations.AlterField(
model_name='documento',
name='descripcion',
field=models.TextField(blank=True, null=True, verbose_name='Descripción del documento'),
),
migrations.RemoveField(
model_name='documento',
name='temporada',
),
migrations.AlterField(
model_name='documento',
name='tipo',
field=models.CharField(choices=[('fabricacion', 'Fabricación'), ('diseno', 'Diseño / CAD'), ('concepto', 'Concepto'), ('simulacion', 'Simulación'), ('dossier_patrocinado', 'Dossier Patrocinio'), ('informe', 'Informe'), ('tutorial', 'Tutorial'), ('otro', 'Otro')], default='informe', max_length=20),
),
migrations.AddField(
model_name='documento',
name='temporada',
field=models.ManyToManyField(related_name='documentos_asociados', to='temporadas.temporada'),
),
]

View file

@ -23,7 +23,7 @@ class Documento(models.Model):
('concepto', 'Concepto'),
('simulacion', 'Simulación'),
('dossier_patrocinado', 'Dossier Patrocinio'),
('informe', 'Informe')
('informe', 'Informe'),
('tutorial', 'Tutorial'),
('otro', 'Otro'),
)
@ -53,7 +53,7 @@ class Documento(models.Model):
ordering = ['-fecha_subida']
def __str__(self):
return f"{self.nombre} ({self.temporada})"
return f"{self.nombre} ({self.get_categoria_display()})"
def delete(self, *args, **kwargs):
# Esto borra el archivo físico del disco duro cuando borras la entrada en la base de datos