2016-10-31 3 views
0

object.save(commit=False)과 같은 작업을하면 m2m 관계가 자동으로 저장되지 않지만 나중에 object.save()으로 전화하면 self.save_m2m()으로 전화해야합니다.왜 save_m2m()이 save() 호출을 자동으로하지 않습니까?

save()을 부르기 때문에 나는 왜 수동으로 save_m2m()을 호출해야하는지 이해할 수 없습니다.

누군가가이 논리를 설명 할 수 있습니까?

감사합니다.

답변

1

설명서에 설명되어 있습니다.

form.save()에는 M2M 관계 생성 및 저장이 포함됩니다. 이는 양식이 한 번에 모든 것을 할 수 있기 때문입니다. 그러나 commit=False을 사용하자 마자 양식은 더 이상 M2M 관계를 만들지 못합니다. 객체 자체가 저장되지 않았기 때문입니다. M2M은 연결할 ID 없이는 불가능합니다.

object.save()은 모델 인스턴스 개체가 아닌 양식의 동작이기 때문에 save_m2m을 호출 할 수 없습니다. 이 객체는 양식을 만들 수 없기 때문에이 시점에서 m2m 관계를 알지 못합니다. 그래서 양식 인의 save_m2m 메소드를 호출해야합니다.

+0

Gotcha. 고맙습니다. –

관련 문제