WebHU - Programozási kérdések és válaszok

Másolja a ManyToMany értéket

Jelenleg egy sok-sok mezőt próbálok átmásolni egyik modellről a másikra, de egy kis gondba ütközök. A ModelMultipleChoiceField mezővel sikerült jól létrehoznom a modellt egy sok-sok mezővel, és a modell úgy ment el, ahogy szeretném. Amikor megpróbálom átmásolni egy másik modellre, nem kapok hibát, de nem történik semmi. Itt van a kód, amit kipróbáltam:

author =  Author.objects.create(author=self.author) 

author = Author.objects.all()[0]
book = entry.approvers.all()
author.pk = None
author.readers.add(*self.readers.all())

Utánajártam mindennek, és rájöttem, hogy az M2M modellek trükkösek lehetnek. Kipróbáltam a fenti kód több változatát, de semmi sem működik. Végigdolgoztam számos must be an instance hibát, és így fedeztem fel a author = Author.objects.all()[0] parancsot. Már nem kapok hibát, de a sok-sok értékeim sem másolódnak át másik modellre. Köszönöm a segítséget.

A SO-n találtam ezt a hivatkozást, és úgy tűnik, hogy ez segítene nekem, de kipróbáltam, de nem működik. Általános osztály alapú nézeteket használok, ami valószínűleg ez okoz nekem egy kis fájdalmat.

Osztályalapú nézetek (CBV), CreateView és request.user sok-többhöz relációval

A példából ezt a sablont használtam a kódomhoz, de hiába.

Meg kell értenem, hogy az „id” mezőben érték kell, hogy legyen, mielőtt ezt a sok-többhöz kapcsolatot használhatnám.

Most találtam ezt a hivatkozást: Django. Objektum létrehozása ManyToManyField hiba

Működik, és a következő paranccsal elküldhetem az egyik M2M értéket, de hogyan tudom ezt megtenni a pk kemény kódolása nélkül?

book.reader.add('1')

A fenti működik, de amikor megpróbálok valami hasonlót

book.reader.add(*self.readers.all())

Ezt tovább kutattam, és ezt...

author =  Author.objects.create(author=self.author) 

Ráadásul ez önmagában is működik...

book.reader.add('1')

Csak azt kell kitalálni, hogyan cserélje le az „1”-et egy változónévre.

További vizsgálat után ez a következő problémához kapcsolódik?

Django: IntegrityError a Many To Many add() során

Úgy tűnik, hogy valami hiba van a bulk_create-ben? A kódolt számmal rendelkező egyéni összeadás remekül működik. Amikor megpróbálom a (*self.readers.all())-val, nem kapok hibaüzenetet, de a manytomany hivatkozás nem kerül átmásolásra az over táblába. Több cikket is láttam, amelyek szerint az általam használt parancsok jól működnek, de lehet, hogy valami máshoz, mint a PostgreSQL-hez.

Köszönöm az esetleges gondolatokat.

Kezdőként a SAVE-ben végeztem ezt a munkát. Miután áthelyeztem a post_save mappába, a következő formátum a várt módon működött...

@receiver(post_save, sender='Test.Book')
  def post_save(sender,instance, **kwargs):

author = book.objects.create(subject=instance.book)
author.approvers.add(*instance.approvers.all())

  • @kabanus A fenti kóddal próbálom másolni. A szerző objektum létrehozása, majd az olvasók hozzáadása az objektumhoz. Azt olvastam, hogy az m2m-mel nem lehet modellt menteni, először létre kell hozni és utána hozzá kell adni az m2m attribútumokat ha jól értem. 24.01.2018
  • Újonc hibát követtem el. Ezt a munkát a modellem SAVE funkciójában végeztem. Amikor áthelyeztem a parancsokat egy post_save függvénybe, a parancsok a várt módon működtek. 01.02.2018
  • Jó látni, hogy rájöttél. Ha utólag úgy gondolja, hogy ez nem hasznos kérdés a közösség számára, azt javaslom, hogy törölje. Ellenkező esetben válaszként tegye közzé megállapításait, hogy mások is profitálhassanak. 01.02.2018

Válaszok:


1

Kezdőként ezt a munkát úgy végeztem el, hogy felülírtam a SAVE-t a modellemben, ahelyett, hogy ezt a munkát post_save jelben végeztem volna. A szemléletmód megváltoztatása megoldotta a problémámat. A helyes megközelítésemhez tartozó kód:

@receiver(post_save,sender='Test.Book')
def post_save(sender,instance,**kwargs):
    author = book.objects.create(subject=instance.book)
    author.approvers.add(*instance.approvers.all())
01.02.2018
Új anyagok

A rádiógomb ellenőrzött eseményének használata a jQueryben
Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

Miért érdemes elkezdeni a kódolást 2023-ban?
01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

🎙 Random Noise #2  – Örökbefogadás és hit
az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..