
consulta relación muchos a muchos en la vista admin
Publicado por cristian (1 intervención) el 17/07/2016 02:02:48
Buenas, como estan? - les comento que estoy arrancando con python y django, y para ello empece haciendo el típico sistemita de biblioteca, por ahora solo estoy trabajando con la vista admin, y bueno llegue a un punto en el cual me surge una duda, cuando tenemos una relacion de muchos a muchos (en mi caso libro y autores) django nos brinda una lista de selección multiple para seleccionar por ejemplo autores si es que estamos en la vista de libro, bueno buscando un poco encontre la opcion inlines y la aplique quedando asi:

el problema que encuentro aqui es que independientemente de la lista de seleccion multiple y las filas con el combo box es que pasa por ejemplo si el sistema tiene, nose 10000 autores... sería muy complicado para el usuario que encuentre el que busca... y que pasaría si por ejemplo en vez de ser autores sea otro modelo el cual tengo que mostrar mas datos... ya que ahora esta utilizando el metodo __string__ para identificar los objetos. Bueno desde ya les agradezco, un saludo! les dejo el codigo por las dudas.
models.py
admin.py

el problema que encuentro aqui es que independientemente de la lista de seleccion multiple y las filas con el combo box es que pasa por ejemplo si el sistema tiene, nose 10000 autores... sería muy complicado para el usuario que encuentre el que busca... y que pasaría si por ejemplo en vez de ser autores sea otro modelo el cual tengo que mostrar mas datos... ya que ahora esta utilizando el metodo __string__ para identificar los objetos. Bueno desde ya les agradezco, un saludo! les dejo el codigo por las dudas.
models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from django.db import models
import datetime
class Biblioteca(models.Model):
razon_social = models.CharField(max_length=200)
telefono = models.CharField(max_length=100)
correo = models.CharField(max_length=150)
def __str__(self):
return self.razon_social
class Genero(models.Model):
nombre = models.CharField(max_length=200)
def __str__(self):
return self.nombre
class Editorial(models.Model):
nombre = models.CharField(max_length=200)
correo = models.CharField(max_length=200)
def __str__(self):
return self.nombre
class Autor(models.Model):
nombre = models.CharField(max_length=200)
apellido = models.CharField(max_length=200)
def __str__(self):
return self.nombre +" "+self.apellido
class Libro(models.Model):
EDICIONES=(
(1,'Primera'),
(2,'Segunda'),
(3,'Tercera'),
(4,'Cuarta'),
(5,'Quinta'),
)
nombre = models.CharField(max_length=200)
edicion = models.IntegerField(choices=EDICIONES)
fecha_publicacion = models.DateField("fecha de publicación")
editorial = models.OneToOneField(Editorial)
genero = models.OneToOneField(Genero)
autores = models.ManyToManyField(Autor)
biblioteca = models.ForeignKey(Biblioteca, default= Biblioteca.objects.get(id=1))
class Ejemplar(models.Model):
codigo = models.IntegerField(default=0)
libro = models.ForeignKey(Libro)
biblioteca = models.ForeignKey(Biblioteca)
class Socio(models.Model):
nombre = models.CharField(max_length=200)
apellido = models.CharField(max_length=200)
dni = models.IntegerField()
teledono = models.CharField(max_length=200)
direccion = models.CharField(max_length=200)
correo = models.CharField(max_length=200)
fecha_nacimiento = models.DateTimeField()
biblioteca = models.ForeignKey(Biblioteca)
def __str__(self):
return self.nombre +" "+self.apellido
class Prestamo(models.Model):
fecha_incio = models.DateTimeField('fecha de inicio')
fecha_fin = models.DateTimeField('facha de fin')
ejemplar = models.ForeignKey(Ejemplar)
socio = models.ForeignKey(Socio)
admin.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from django.contrib import admin
from .models import Libro, Editorial, Genero, Autor, Biblioteca
class AutoresInline(admin.TabularInline):
model = Libro.autores.through
class AutorAdmin(admin.ModelAdmin):
inlines = [
AutoresInline,
]
class LibroAdmin(admin.ModelAdmin):
fields = ['biblioteca',('editorial', 'genero', 'edicion'), ('nombre', 'fecha_publicacion')]
list_display = ('nombre', 'fecha_publicacion', 'genero', 'edicion',)
readonly_fields = ('biblioteca',)
inlines = [
AutoresInline,
]
admin.site.register(Libro, LibroAdmin)
admin.site.register(Editorial)
admin.site.register(Genero)
admin.site.register(Autor)
admin.site.register(Biblioteca)
Valora esta pregunta


0