with what tutorial para framework español develop applications django django-models

django - what - Muchas a muchas relaciones con datos adicionales sobre la relación



tutorial de django (1)

Estoy tratando de crear una base de datos django que registra todas mis compras de cómics, y he encontrado algunos problemas. Estoy tratando de modelar la relación entre un tema cómico y los artistas que trabajan en él.

Un número cómico tiene uno o más artistas trabajando en el tema, y ​​un artista trabajará en más de un solo tema. Además, el artista tiene un papel relacionado con lo que hicieron en el cómic - creador (todo el trabajo sobre ese tema), escritor (escribió el guión), dibujante (dibujó el cómic completo), lápices, tintas, colores o texto, y puede haber varios artistas en un papel determinado.

Esto me da un modelo de base de datos como:

Luego traduzco esto al siguiente modelo de Django. Como necesito datos adicionales sobre la relación, creo que tengo que usar una clase separada para manejar la relación y mantener la

class Artist(models.Model): name = models.CharField(max_length = 100) def __unicode__(self): return self.name class ComicIssue(models.Model): issue_number = models.IntegerField() title = models.TextField() artists = models.ManyToManyField(Artist, through=''IssueArtist'') def __unicode__(self): return u''issue = %s, %s'' % (self.issue_number, self.title) class IssueArtist(models.Model): roles = ( (0, "--------"), (1, "Creator"), (2, "Writer"), (3, "Drawer"), (4, "Pencils"), (5, "Inks"), (6, "Colours"), (7, "Text"), ) artist = models.ForeignKey(Artist) issue = models.ForeignKey(ComicIssue) role = models.IntegerField(choices = roles)

Mis preguntas son:

1) ¿Parece esto una forma correcta de modelar esto?

2) Si no uso la función through=''IssueArtist'' , puedo agregar relaciones mediante la función artists.add() . Si uso esto, obtengo un error ''ManyRelatedManager'' object has no attribute ''add'' . ¿Tengo que administrar manualmente la relación creando instancias de IssueArtist() y buscando explícitamente la tabla de relaciones? NÓTESE BIEN. Estoy usando Django 1.0, en este momento


Le recomiendo que consulte la sección "CAMPOS ADICIONALES SOBRE MUCHAS RELACIONES" en la documentación de Django : cubre exactamente su pregunta.

1: sí, crear un modelo intermediario es el camino a seguir.

2: De la documentación: "A diferencia de los campos normales de muchos a muchos, no puede usar agregar, crear o asignar para crear relaciones". En su lugar, para agregar un Artista a un problema, hágalo desde el modelo intermedio:

some_artist = Artist.objects.get(name=''some name'') some_issue = Issue.objects.get(tile=''some tite'') IssueArtist.objects.create(artist= some_artist, issue = some_issue, role=1)