Das Argument von models.ForeignKey () enthält einen Parameter namens related_name, der verwendet wird, wenn Modelle in Django miteinander verknüpft werden. Ich wusste jedoch nicht, wann er verwendet wird, und habe ihn daher überprüft.
Dieses Mal erstellen wir ein Kategoriemodell und ein Post-Modell wie folgt.
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
Angenommen, der obige Code generiert 3 Kategorien und 6 Beiträge und hat die in der folgenden Abbildung gezeigte Beziehung.
Die folgenden zwei Fälle werden aufgeteilt und jede Methode wird berücksichtigt.
Kann über object.field name
erhalten werden
>>> post1 = Post.object.get(id=1)
>>> post1
<Post:quadratische Funktion>
>>> post1.category
<Category:Mathematik>
Kann mit object.model name (lower) _set.all ()
abgerufen werden
>>> category3 = Category.object.get(id=3)
>>> category3
<Category:Gesellschaft>
>>> category3.post_set.all()
<QuerySet [<Post:Ryoma Sakamoto>, <Post:Kamakura Shogunate>]>
model name (lower) _set
ersetzt wird.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') #hinzufügen
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:Gesellschaft>
>>> category3.posts.all() #Veränderung
<QuerySet [<Post:Ryoma Sakamoto>, <Post:Kamakura Shogunate>]> #← Das Ergebnis ist das gleiche