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())