Tagairt rudaí gaolmharaLink to this heading
Is bainisteoir é “bainisteoir gaolmhar” a úsáidtear i gcomhthéacs gaolmhar duine le go leor nó go leor. Tarlaíonn sé seo i dhá chás:
An “taobh eile” de a:class: ~Django.db.Models.ForeignKey gaol. Is é sin:
from django.db import models class Blog(models.Model): # ... pass class Entry(models.Model): blog = models.ForeignKey(Blog, on_delete=models.CASCADE, null=True)Sa sampla thuas, beidh na modhanna thíos ar fáil ar an mbainisteoir
blog.entry_set.An dá thaobh de a:class: ~Django.db.Models.ManyTomanyField gaol:
class Topping(models.Model): # ... pass class Pizza(models.Model): toppings = models.ManyToManyField(Topping)Sa sampla seo, beidh na modhanna thíos ar fáil ar
topping.pizza_setagus ar pizza.toppings`.
Asynchronous version:
aaddCuireann sé na rudaí samhail sonraithe leis an tacar réad gaolmhar.
Sampla:
>>> b = Blog.objects.get(id=1) >>> e = Entry.objects.get(id=234) >>> b.entry_set.add(e) # Associates Entry e with Blog b.<django.db.models.query.QuerySet.update>Sa sampla thuas, i gcás caidreamh a:class: ~Django.db.Models.ForeignKey, úsáidtear:: meth: `QuerySet.Update () `chun an nuashonrú a dhéanamh. Éilíonn sé seo go ndéanfar na rudaí a shábháil cheana féin.
Is féidir leat an argóint
Bulk=Falsea úsáid chun an bainisteoir gaolmhar an nuashonrú a dhéanamh ina ionad sin trí ghlaoch ar ``e.save () ``.<django.db.models.query.QuerySet.bulk_create>Ag baint úsáide as add () ``le caidreamh go leor, áfach, ní ghlaofar aon mhodhanna ``save ()` (níl an argóint
bulkann), ach cruthófar na caidrimh ag baint úsáid:meth: QuerySet.bulk_create () `. Más gá duit roinnt loighic saincheaptha a fhorghníomhú nuair a chruthaítear caidreamh, éist leis an gcomhartha: data: `~django.db.models.signals.m2m_changed, a spreagfaidh gníomharthapre_addaguspost_add.Ní dhúbailt an gaol a úsáid `add () ``ar ghaol atá ann cheana féin, ach spreagfaidh sé comharthaí fós.
Maidir le caidrimh go go leor glacann add () ``le cásanna samhail nó luachanna réimse, eochracha bunscoile de ghnáth, mar argóint ``*objs`.
<intermediary-manytomany>Úsáid an argóint through_defaults` chun luachanna a shonrú do shampla nua:ref: samhail idirmheán, más gá. Is féidir leat glaonna a úsáid mar luachanna sa fhoclóir through_defaults agus déanfar iad a mheas uair amháin sula gcruthófar aon sampla (í) idirmheánach.
Asynchronous version:
acreateCruthaíonn sé réad nua, sábhálann sé agus cuireann sé sa tacar réad gaolmhar é. Tugann an réad nua-chruthaithe ar ais:
>>> b = Blog.objects.get(id=1) >>> e = b.entry_set.create( ... headline="Hello", body_text="Hi", pub_date=datetime.date(2005, 1, 1) ... ) # No need to call e.save() at this point -- it's already been saved.Tá sé seo coibhéiseach le (ach níos simplí ná):
>>> b = Blog.objects.get(id=1) >>> e = Entry(blog=b, headline="Hello", body_text="Hi", pub_date=datetime.date(2005, 1, 1)) >>> e.save(force_insert=True)Tabhair faoi deara nach gá argóint eochairfhocal an tsamhail a shonrú a shainmhíníonn an caidreamh. Sa sampla thuas, ní chuirimid an paraiméadar
blog ``ar aghaidh chuig ``create (). Figireann Django amach gur chóir réimseblog ``réad nua ``Entrya shocrú gob.<intermediary-manytomany>Úsáid an argóint through_defaults` chun luachanna a shonrú don shampla nua:ref: samhail idirmheán, más gá. Is féidir leat glaonna a úsáid mar luachanna sa fhoclóir through_defaults`.
Asynchronous version:
aremoveBaineann na rudaí samhail sonraithe as an tacar réad gaolmhar:
>>> b = Blog.objects.get(id=1) >>> e = Entry.objects.get(id=234) >>> b.entry_set.remove(e) # Disassociates Entry e from Blog b.Similar to
add(),e.save()is called in the example above to perform the update. Usingremove()with a many-to-many relationship, however, will delete the relationships usingQuerySet.delete()which means no modelsave()methods are called; listen to them2m_changedsignal if you wish to execute custom code when a relationship is deleted.Maidir le caidrimh go leor glacann
remove () ``le cásanna samhail nó luachanna réimse, eochracha príomhúla de ghnáth, mar argóint ``*objs.Maidir le rudaí: Class: ~Django.db.Models.ForeignKey, níl an modh seo ann ach má tá
Null=True. Mura féidir an réimse gaolmhar a shocrú goNone(NULL`), ansin ní féidir réad a bhaint as gaol gan é a chur le ceann eile. Sa sampla thuas, tá e` a bhaint asb.entry_set () ``comhionann le ``e.blog = Nonea dhéanamh, agus toisc nach bhfuilNull=Trueag anblog:class: ~django.db.models.foreignKey, tá sé seo neamhbhailí.Maidir le rudaí: Class: ~Django.db.Models.ForeignKey, glacann an modh seo le argóint
bulkchun rialú a dhéanamh conas an oibríocht a dhéanamh. Má táTrue(an réamhshocrú), úsáidtearQuerySet.Update () ``. Má tá ``Bulk=false ``, tugtar an modh ``save ()de gach samhail aonair ina ionad. Spreagann sé seo comharthaí: ~django.db.models.signals.pre_save agus:data: ~django.db.models.signals.post_save agus tagann sé ar chostas na feidhmíochta.Maidir le caidrimh go leor, níl an argóint eochairfhocal
bulkann.
Leagan asincrón:
aclearBaineann gach rud as an tacar réad gaolmhar:
>>> b = Blog.objects.get(id=1) >>> b.entry_set.clear()Tabhair faoi deara nach scriosann sé seo na rudaí gaolmhara - dícheanglaíonn sé ach iad.
Díreach mar
remove () ``, níl `clear ()ar fáil ach ar:class: ~django.db.models.foreignKeys ina bhfuilnull=trueagus glacann sé leis an argóint eochairfhocalbulkfreisin.Maidir le caidrimh go leor, níl an argóint eochairfhocal
bulkann.
Leagan asincrón:
asetCuir an tacar rudaí gaolmhara in ionad:
>>> new_list = [obj1, obj2, obj3] >>> e.related_set.set(new_list)Glacann an modh seo le argóint
soiléir ``chun rialú a dhéanamh ar conas an oibríocht a dhéanamh. Má tá ``False(an réamhshocraithe), baintear na heilimintí atá in easnamh ón tacar nua ag baint úsáide asremove () ``agus ní chuirtear ach na cinn nua leis. Má tá ``clear=True, tugtar an modh ``clear () ``ina ionad sin agus cuirtear an tacar iomlán leis ag an am céanna.Maidir le rudaí: Class: ~Django.db.Models.ForeignKey, cuirtear an argóint
bulkar aghaidh chuig:meth: add agus:meth: remove.Maidir le caidrimh go leor, níl an argóint eochairfhocal
bulkann.Tabhair faoi deara ós rud é gur oibríocht chumaisc é
set () ``, go bhfuil sé faoi réir coinníollacha cine. Mar shampla, féadfar rudaí nua a chur leis an mbunachar sonraí idir an glao chun ``clear () ``agus an glao chun ``add ().Maidir le caidrimh go leor glacann set () ``liosta de chásanna samhail nó luachanna réimse, eochracha príomhúla de ghnáth, mar argóint ``objs`.
<intermediary-manytomany>Úsáid an argóint through_defaults` chun luachanna a shonrú do shampla nua:ref: samhail idirmheán, más gá. Is féidir leat glaonna a úsáid mar luachanna sa fhoclóir through_defaults agus déanfar iad a mheas uair amháin sula gcruthófar aon sampla (í) idirmheánach.