Je suis en train de créer une base de données django qui enregistre tous mes achats de bandes dessinées, et j'ai rencontré quelques problèmes. J'essaie de modéliser la relation entre un problème comique et les artistes qui y travaillent. Un numéro de bande dessinée a un ou plusieurs artistes travaillant sur le problème, et un artiste travaillera sur plus d'un seul numéro. En outre, l'artiste a un rôle en relation avec ce qu'ils ont fait sur le créateur de bande dessinée (tout le travail sur cette question), écrivain (a écrit le script), tiroir (dessiné la bande dessinée complète), crayons, encres, couleurs ou texte, et il peut y avoir plusieurs artistes dans un rôle donné.Plusieurs à plusieurs relations avec des données supplémentaires sur la relation
Cela me donne un modèle de base de données comme:
Je traduis alors ce dans le modèle Django suivant. Comme je l'ai besoin de données supplémentaires sur la relation, je crois que je dois utiliser une classe distincte pour gérer la relation, et tenir le plus
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)
Mes questions sont les suivantes:
1) Est-ce que cela semble un bon façon de modéliser cela? 2) Si je n'utilise pas la fonction through='IssueArtist'
, je peux ajouter des relations en utilisant la fonction artists.add()
. Si je l'utilise, j'obtiens une erreur 'ManyRelatedManager' object has no attribute 'add'
. Dois-je gérer manuellement la relation en créant des instances IssueArtist()
et en recherchant explicitement dans la table de relations? NB. J'utilise Django 1.0, en ce moment
Ce lien est précisément ce que je cherchais et ne pas trouver. Je pense que je dois regarder mes compétences de recherche. –
Ceci est une véritable partie de «mer agitée» de Django. Le message d'erreur est trompeur et les méthodes add/create devraient fonctionner comme prévu. Merci d'avoir posté cette réponse. – Rich
juste en soulignant que a.save() est inutile si vous utilisez la méthode create(). https://docs.djangoproject.com/fr/dev/ref/models/querysets/#django.db.models.query.QuerySet.create –