2010-04-23 11 views
4

Je suis en train d'apprendre django et de suivre un tutoriel. J'ai un lien et un signet. Contrairement au didacticiel que je suis, je voudrais qu'un lien soit associé à un seul signet, mais un signet peut avoir plusieurs liens. Est-ce la façon de configurer le modèle?Modèle Django: plusieurs-à-plusieurs ou plusieurs-à-un?

class Link(models.Model): 
    url = models.URLField(unique=True) 
    bookmark = models.ForeignKey(Bookmark) 

class Bookmark(models.Model): 
    title = models.CharField(maxlength=200) 
    user = models.ForeignKey(User) 
    links = models.ManyToManyField(Link) 

Répondre

6

N ° Retirer links du modèle favori, et pour accéder aux objets de lien pour un particulier Bookmark vous utiliserez bookmark.link_set.all() (où signet est un objet spécifique signet). Django remplit la relation inverse pour vous.

Ou si vous le souhaitez, indiquez le related name dans la clé ForeignKey bookmark, par exemple "links" si vous ne souhaitez pas "link_set".

4

Il suffit de définir la relation dans l'un des modèles. Django crée automatiquement un attribut dans l'autre modèle.

Si vous voulez faire le lien associé à un seul signet, définir une clé étrangère dans Link qui renvoie à un objet Bookmark:

class Bookmark(models.Model): 
    title = models.CharField(max_length=200) 
    user = models.ForeignKey(User) 

class Link(models.Model): 
    url = models.URLField(unique=True) 
    bookmark = models.ForeignKey(Bookmark) 

Pour accéder aux liens d'un signet, utilisez bookmark.link_set. Cet attribut est créé automatiquement par Django.

1

Non, retirer la déclaration links = de Bookmark - ce qui est pour vous prédéfini dans signet est une propriété link_set qui est la requête pour les liens dont signet est celui-ci (vous pouvez renommer cette propriété, mais il n'y a vraiment pas besoin).

1

si je change le code comme ce par exemple: classe Bookmark (models.Model): title = models.CharField (max_length = 200)

class Link(models.Model): 
    url = models.URLField(unique=True) 
    bookmark = models.ForeignKey(Bookmark) 

est bonne relation pour eux,