[PYTHON] Django / Verwandte Objekte (Hinzufügen, Erstellen, Entfernen, Löschen, Festlegen) Zusammenfassung

schreiben

Ich habe mehrmals untersucht, wie man Hinzufügen, Erstellen, Entfernen, Löschen und Festlegen verwendet. Es ist mühsam, jedes Mal Englisch zu lesen, deshalb werde ich es auf Japanisch zusammenfassen. Django Documentation / Related objects reference

Modell zur Vorbereitung, Daten


from django.db import models

class Reporter(models.Model):
    pass


class Article(models.Model):
    title = models.CharField(max_length=255, null=True)
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)

r1 = Reporter.objects.create(name='reporter1')
r2 = Reporter.objects.create(name='reporter2')

a1 = Article.objects.create(title='article1', reporter=r1)
a2 = Article.objects.create(title='article2', reporter=r1)
a3 = Article.objects.create(title='article3', reporter=r2)

Über jede Methode

add(*objs, bulk=True, through_defaluts=None) Sie können den externen Schlüssel der untergeordneten Tabelle in der Eltern-Kind-Beziehung mithilfe der Methode add aktualisieren.

Beispiel der Verwendung


>>> r1.article_set.all()
<QuerySet [<Article: Article object (1)>, <Article: Article object (2)>]>
>>> r2.article_set.all()
<QuerySet [<Article: Article object (3)>]>
>>> r2.article_set.add(a1,a2)
>>> r1.article_set.all()
<QuerySet []>
>>> r2.article_set.all()
<QuerySet [<Article: Article object (1)>, <Article: Article object (2)>, <Article: Article object (3)>]>

bulk=False

Sie können ein Objekt übergeben, das noch nicht als Argument gespeichert wurde, indem Sie "batch = False" verwenden. Als "Bulk = False" werden jedoch Abfragen nach der Anzahl der hinzuzufügenden Objekte ausgegeben.


>>> r1.article_set.all()
<QuerySet [<Article: Article object (1)>, <Article: Article object (2)>]>
>>> new_a1 = Article()
>>> new_a2 = Article()
>>> r1.article_set.add(new_a1, new_a2, bulk=False)
>>> r1.article_set.all()
<QuerySet [<Article: Article object (1)>, <Article: Article object (2)>, <Article: Article object (4)>, <Article: Article object (5)>]
INSERT INTO `article` (`reporter_id`) VALUES (1)  # new_a1
INSERT INTO `article` (`reporter_id`) VALUES (1)  # new_a2

create(through_defaluts=None, **kwargs) Mit der Methode create können Sie einen neuen Datensatz mit einer kleinen Menge an Beschreibung erstellen.


>>> r1.article_set.create()
>>> r1.article_set.all()
<QuerySet [<Article: Article object (1)>, <Article: Article object (2)>, <Article: Article object (3)>]>

Dies hat ähnliche Ergebnisse wie:


>>> new_a = Article(reporter=r1)
>>> new_a.save()
>>> r1.article_set.all()

remove(*objs, bulk=True) remove () aktualisiert ForeignKey auf Null. Es kann nur verwendet werden, wenn "ForeignKey (null = True)". Wenn Sie im oben vorbereiteten Modell "Fremdschlüssel (null = True)" festlegen, können Sie ihn wie folgt verwenden.


>>> r1.article_set.remove(a1, a2)

bulk=False Sie können Datensätze auch einzeln aktualisieren, indem Sie "Bulk = False" wie bei "add ()" übergeben.


>>> r1.article_set.remove(a1, a2, bulk=False)
>>> r1.article_set.all()
<QuerySet []>

Wenn "Bulk = True", wird "QuerySet.update ()" aufgerufen, aber wenn "Bulk = False", wird "Save ()" mehrmals aufgerufen.

clear(bulk=True) clear () aktualisiert ForeignKey für alle Kinder auf Null. Wie clear () kann es nur verwendet werden, wenn ForeignKey (null = True).


>>> r1.article_set.clear()
>>> r1.article_set.all()
<QuerySet []>

bulk=False


>>> r1.article_set.clear(bulk=False)
>>> r1.article_set.all()
<QuerySet []>

Wie bei remove () wird save () mehrmals aufgerufen.

set(objs, bulk=True, clear=False, through_defaults=None) GitHub-Link von set (OneToMany)

In set () werden add (), remove () und clear () ausgeführt. Wenn Sie "Bulk = True / False" als Argument übergeben, wird "Bulk" in das Argument dieser darin enthaltenen Methoden aufgenommen.

clear=False

>>> r1.article_set.set([a1, a3], bulk=False)

Ist das gleiche wie:


>>> r1.article_set.remove(a2, bulk=False)
>>> r1.article_set.add(a1, a3, bulk=False)

clear=True


>>> r1.article_set.set([a1, a3], clear=True)

Ist das gleiche wie:

>>> r1.article_set.clear()
>>> r1.article_set.add(a1, a3)

Zusammenfassung

Ich habe das Dokument über Djangos verwandte Objekte wieder gelesen. Insbesondere war mein Verständnis der als Argumente übergebenen Optionen vage, daher hoffe ich, dass es jemandem hilft, der ähnlich ist.

Referenz

Recommended Posts

Django / Verwandte Objekte (Hinzufügen, Erstellen, Entfernen, Löschen, Festlegen) Zusammenfassung
Set Methode hinzufügen entfernen löschen
Zusammenfassung der Einstellungen für statische Django-Dateien (statisch)
Django Zusammenfassung
Django Zusammenfassung