Il y a un paramètre appelé related_name dans l'argument de models.ForeignKey () utilisé lors de l'association de modèles entre eux dans Django, mais je ne savais pas quand il sera utilisé, donc je l'ai vérifié.
Cette fois, nous allons créer un modèle de catégorie et un modèle de publication comme suit.
apps/models.py
class Category(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
def __str__(self):
return self.name
class Post(models.Model):
category = models.ForeignKey(to=Category, on_delete=models.CASCADE)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
content = models.TextField()
def __str__(self):
return self.title
Supposons que le code ci-dessus génère 3 catégories et 6 messages, et a la relation illustrée dans la figure suivante.
Les deux cas suivants sont divisés et chaque méthode est considérée.
Peut être obtenu par ʻobject.field name`
>>> post1 = Post.object.get(id=1)
>>> post1
<Post:fonction quadratique>
>>> post1.category
<Category:Math>
Peut être obtenu avec ʻobject.model name (lower) _set.all () `
>>> category3 = Category.object.get(id=3)
>>> category3
<Category:société>
>>> category3.post_set.all()
<QuerySet [<Post:Ryoma Sakamoto>, <Post:Shogunat de Kamakura>]>
model name (lower) _set
.category3.post_set.all()
→→ category3.posts.all()
apps/models.py
class Category(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
class Post(models.Model):
category = models.ForeignKey(to=Category, on_delete=models.CASCADE, related_name='posts') #ajouter à
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
content = models.TextField()
>>> category3 = Category.object.get(id=3)
>>> category3
<Category:société>
>>> category3.posts.all() #Changement
<QuerySet [<Post:Ryoma Sakamoto>, <Post:Shogunat de Kamakura>]> #← Le résultat est le même