Django Viele zu Viele Beziehung hinzufügen funktioniert nicht

Ich verwende das ManyToManyField von Django für eines meiner Modelle.

class Requirement(models.Model):
    name = models.CharField(max_length=200)


class Course(models.Model):
    requirements = models.ManyToManyField(Requirement)

Ich möchte Anforderungen für meine Klassen zuweisen können. Dazu versuche ich Folgendes: Ich erhalte eine Klasse, einen Kurs, der bereits gespeichert ist oder den ich gerade gespeichert habe, und führe Folgendes aus:

c = Course.objects.get(title="STACK 100")
req = Requirement.objects.get(name="XYZ")
c.requirements.add(req)

Während dies funktioniert, wenn ich es über die Django manage.py-Shell mache, funktioniert es nicht, wenn ich es programmgesteuert in einem Skript mache. Ich arbeite mit anderen Modellen in diesem Skript und das alles funktioniert gut. Und ich weiß sogar, dass es den aktuellen Kurs und die Anforderung erfolgreich abruft, wenn ich beide überprüfe. Ich kann nicht herausfinden, was das Problem ist!

BEARBEITEN

Was ich damit meine, nicht zu arbeiten, ist, dass das Anforderungsfeld des Kurses leer bleibt. Wenn ich zum Beispiel c.requirements.all () tue, erhalte ich eine leere Liste. Wenn ich diesen Ansatz jedoch über die Shell durchführe, wird die Liste ausgefüllt. Das Skript ist ein Crawler, der BeautifulSoup zum Crawlen einer Website verwendet. Ich versuche, den Kursen Anforderungen in der folgenden Funktion hinzuzufügen:

def create_model_object(self, course_dict, req, sem):
    semester = Semester.objects.get(season=sem)

    #Checks if the course already exists in the database
    existing_matches = Course.objects.filter(number=course_dict["number"])
    if len(existing_matches) > 0:
        existing_course = existing_matches[0]

        if sem=="spring":
            existing_course.spring = semester
        else:
            existing_course.fall = semester
        existing_course.save()
        c = existing_course

    #Creates a new Course in the database
    else:
        if sem == "spring":
            new_course = Course(title=course_dict["title"],
                        spring=semester)
        else:
            new_course = Course(title=course_dict["title"],
                        fall=semester)
        new_course.save()
        c = new_course

    curr_req = Requirement.objects.get(name=req)
    c.requirements.add(curr_req)
    print(c.id)

EDIT 2:

Nachdem ich in die Funktion eingetreten bin, habe ich Folgendes gefunden:

def __get__(self, instance, instance_type=None):
    if instance is None:
        return self

    rel_model = self.related.related_model

    manager = self.related_manager_cls(
        model=rel_model,
        query_field_name=self.related.field.name,
        prefetch_cache_name=self.related.field.related_query_name(),
        instance=instance,
        symmetrical=False,
        source_field_name=self.related.field.m2m_reverse_field_name(),
        target_field_name=self.related.field.m2m_field_name(),
        reverse=True,
        through=self.related.field.rel.through,
    )

    return manager

Und laut meinem Debugger ist der Manager vom Typ Planer (mein Projektname) .Course.None.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage