Seite 1 von 1

Django - Eingabe in der shell bei many-to-many relation

Verfasst: Donnerstag 18. Juli 2019, 08:35
von Grumpy Cat
Guten Morgen,

ich beschäftige mich derzeit mit der many-to-many-Beziehung in Django. Im Admin-Panel klappt die Eingabe von Daten, nun möchte ich das auch mit der python-shell machen. Hier habe ich aber Probleme. Mein Model sieht wie folgt aus:

Code: Alles auswählen

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=255)
    authors = models.ManyToManyField("Author", related_name="books")

    def __str__(self):
        return self.title

class Author(models.Model):
    name = models.CharField(max_length=255, unique=True)

    def __str__(self):
        return self.name
Mein Ansatz ist wäre):

Code: Alles auswählen

from books.models import Author, Book
book1 = Book(title='Python unchained', authors='Guido van Rossum')
Dies führt zu der Fehlermeldung:

Code: Alles auswählen

TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use authors.set() instead
Könnt ihr mir sagen, wie die korrekte Eingabe lautet, wenn ich obigem Buch 1 Autor zuordnen möchte und wenn ich 2 Autoren zuordnen möchte?

LG
Kerstin

Re: Django - Eingabe in der shell bei many-to-many relation

Verfasst: Donnerstag 18. Juli 2019, 09:22
von Bolitho
siehe hier:
https://docs.djangoproject.com/en/2.2/t ... y_to_many/

Code: Alles auswählen

from books.models import Author, Book
book1 = Book(title='Python unchained')
book1.save()
book1.authors.add(Author.objects.get(name="Guido van Rossum"))

Code: Alles auswählen

# zwei Autoren
book1.authors.add(Author.objects.get(name="Guido van Rossum"), Author.objects.get(name="2nd Author"))

Re: Django - Eingabe in der shell bei many-to-many relation

Verfasst: Donnerstag 18. Juli 2019, 09:23
von sparrow
Many to Many bedeutet ja, dass ein Buch mehrere Autoren und ein Autor mehrere Bücher haben kann. Deshalb kannst du da nicht einfach eine Zeichenkette reinschreiben. Stell dir mal vor, du würdest noch den Geburtstag des Autors in Author speichern. Woher soll Django denn wissen, wohin das gespeichert werden soll?

Du musst also Instanzen von Author dort einfügen.

Wie das geht, steht hier.

Re: Django - Eingabe in der shell bei many-to-many relation

Verfasst: Freitag 19. Juli 2019, 08:45
von Grumpy Cat
Hey ihr beiden,

vielen Dank für eure Antworten/Links. Problem ist gelöst und ich habe einiges dazugelernt.

LG