Django Отношение ко многим ко многим добавляет не работает
Я использую ManyToManyField от Django для одной из моих моделей.
class Requirement(models.Model):
name = models.CharField(max_length=200)
class Course(models.Model):
requirements = models.ManyToManyField(Requirement)
Я хочу иметь возможность назначать требования для моих классов, поэтому для этого я пытаюсь сделать следующее: я получаю класс, курс, который уже сохранен или только что сохранен, и запускаю следующее:
c = Course.objects.get(title="STACK 100")
req = Requirement.objects.get(name="XYZ")
c.requirements.add(req)
Хотя это работает, когда я делаю это через оболочку Django manage.py, это не работает, когда я делаю это программно в скрипте. Я работаю с другими моделями в этом сценарии, и все работает нормально. И я даже знаю, что он успешно извлекает текущий курс и требования, когда я проверяю оба. Я не могу понять, в чем проблема!
РЕДАКТИРОВАТЬ:
Я не имею в виду, что поле требований курса остается пустым. Например, если я сделаю c.requirements.all (), я получу пустой список. Однако, если я сделаю этот подход через оболочку, список будет заполнен. Сценарий представляет собой сканер, который использует BeautifulSoup для сканирования веб-сайта. Я пытаюсь добавить требования к курсам в следующей функции:
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)
РЕДАКТИРОВАТЬ 2:
После перехода в функцию я нашел следующее:
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
И, согласно моему отладчику, менеджер относится к типу planner (имя моего проекта) .Course.None.