Skip to content

Instantly share code, notes, and snippets.

@melizeche
Last active May 9, 2020 22:31
Show Gist options
  • Save melizeche/ddf09b88ac7b7223c98031ebc6d94cf0 to your computer and use it in GitHub Desktop.
Save melizeche/ddf09b88ac7b7223c98031ebc6d94cf0 to your computer and use it in GitHub Desktop.
Django models con relaciones entre tablas
from django.db import models
# Un Autor puede tener varios libros
# Un libro puede tener un autor
# Un Libro puede tener varios Generos
# Un Genero puede pertenecer a varios libros
# null=True, blank=True hace que el campo sea opcional
class Autor(models.Model):
nombre = models.CharField(max_length=120)
nacionalidad = models.CharField(max_length=120, null=True, blank=True)
def __str__(self):
return self.nombre
class Libro(models.Model):
nombre = models.CharField(max_length=120)
sinopsis = models.TextField(null=True, blank=True)
#ForeignKey('NombreDeLaTabla') relaciona un autor a un libro
autor = models.ForeignKey('Autor', on_delete=models.SET_NULL, null=True, blank=True)
#ManyToManyField('NombreDeLaTabla') relaciona un libro con uno o mas generos
generos = models.ManyToManyField('Genero')
def __str__(self):
return self.nombre
class Genero(models.Model):
nombre_genero = models.CharField(max_length=50)
def __str__(self):
return self.nombre_genero
@melizeche
Copy link
Author

from app1.models import Libro

In [2]: Libro.objects.all()
Out[2]: <QuerySet [<Libro: Don Quijote>, <Libro: Don Quijote 2: La venganza>]>

In [3]: qs = Libro.objects.all()

In [4]: qs.all()
Out[4]: <QuerySet [<Libro: Don Quijote>, <Libro: Don Quijote 2: La venganza>]>

In [5]: qs.filter(id=1)
Out[5]: <QuerySet [<Libro: Don Quijote>]>

In [6]: qs.filter(id=1)
Out[6]: <QuerySet [<Libro: Don Quijote>]>

In [7]: qs.filter(id=2)
Out[7]: <QuerySet [<Libro: Don Quijote 2: La venganza>]>

In [8]: qs
Out[8]: <QuerySet [<Libro: Don Quijote>, <Libro: Don Quijote 2: La venganza>]>

In [9]: len(qs)
Out[9]: 2

In [10]: qs[1]
Out[10]: <Libro: Don Quijote 2: La venganza>

In [11]: donqui2  = qs[1]

In [12]: donqui2
Out[12]: <Libro: Don Quijote 2: La venganza>

In [13]: donqui2.autor
Out[13]: <Autor: Miguel de Cervantes>

In [14]: donqui2.nombre
Out[14]: 'Don Quijote 2: La venganza'

In [15]: donqui2.generos
Out[15]: <django.db.models.fields.related_descriptors.create_forward_many_to_many_manager.<locals>.ManyRelatedManager at 0x7fa16821b438>

In [17]: donqui2.generos
Out[17]: <django.db.models.fields.related_descriptors.create_forward_many_to_many_manager.<locals>.ManyRelatedManager at 0x7fa16827d080>

In [18]: donqui2.generos.all()
Out[18]: <QuerySet [<Genero: Ficcion>, <Genero: Novela>]>

Copy link

ghost commented May 9, 2020

No entiendo nada. Creo que es mas practico y breve y MAS CLARO, haber dejado la sintaxis de la instrucción (select o queryset) donde se relacionan estas tablas, y esos numeritos son del terror, at 0x7fa16821b438 es chino

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment