모델 M은 django에서 3 가지 모델에 대한 3 개의 manytomanyfields (a, b, c)를 포함합니다.dajngo, 멀티와 함께 모델을 통해 m2m 신호를 변경 ManyToManyField
class M (models.Model):
name = models.CharField()
a = models.ManyToManyField(A)
b = models.ManyToManyField(B)
c = models.ManyToManyField(C)
내가 내 모델 M에 변경 사항을 처리하고 대응 URL에 HttpRequest를을 보내려면, 알고있다. 모델 M의 사후 저장 신호에서 알 수 있듯이 모델 M 저장이 완료 될 때 설정되기 때문에 a, b 및 c에 대한 속성 값이 아직 설정되지 않았습니다. (ManyToManyField의 규칙)
I 변경 사항을 처리하기 위해 내 모델에 대한 하나의 처리기를 작성 (중 새로운 인스턴스를 생성하거나 필드/필드를 업데이트)
@receiver(post_save, sender=M)
@receiver(m2m_changed, sender=M.a.through)
@receiver(m2m_changed, sender=M.b.through)
@receiver(m2m_changed, sender=M.c.through)
def M_changes_handler(sender, **kwargs):
is_instance_set_compeletly(kwargs['instance']):
#send_and_HttpRequest(url, data = instance)
def is_instance_set_compeletly(kwargs['instance']):
if M.a.all() is not None and M.b.all() is not None and
M.c.all()is not None
flag = True
else:
flag = False
return flag
이제 모든 신호를 보낼 것입니다 모델 M에 (모든 필드를 변경) 업데이트 요청을 고려 필드 a, b 및 c; 그래서 세 가지 httpRequests는 인스턴스의 세 가지 버전으로 내 보낸 사람에게 보낼 것입니다! 반면에 사용자가 모델 M의 필드 b를 변경하면이 함수는 하나의 httpRequest 만 전송합니다.
나는 누군가가 나를 :) 도움이 될 수 있다면 나는 궁금 을 M.를 동적으로이 문제를 처리하고 그냥 내 모델에 변화의 모든 종류 당 하나 개의 요청을 보낼
* 위의 코드는 단지 초안 참고 구문 오류가있어 무시하십시오.)
업데이트 : 문제가 해결되었습니다. m2mfields를 포함하는 모델을 저장하는 프로세스가 처리 중입니다! 먼저 m2m 필드가 아닌 M의 모든 입력란. post_save를 호출하기 전에 char 필드, 외래 키 등이 설정되었습니다. 따라서 post_save에서 값은 업데이트됩니다 m2mfields는 모델 저장이 완료 될 때까지 설정되지 않습니다. 그런 다음 m2mfields를 설정하기 위해 m2mfields를 호출합니다. m2mfields가 모두 설정된 후 "양식 저장"이 호출되기 때문에 admin.py의 양식 저장을 재정의하는 것이 유일한 방법입니다.
예제를 추가하여 문제를 해결할 수 있습니까? –