나는 pre_save
이벤트를 통해 자신을 설정하는 modified
필드를 제공하는 django_extensions TimeStampedModel을 사용하고 있습니다. 이전 스키마를 변환하고 원본 modified
datestamp를 보존하려는 경우를 제외하고 어느 것이 좋습니다. 수정 한 pre_save를 다른 값으로 monkeypatch, avoid, cancel 또는 바꾸려면 어떻게해야합니까?Django에서 저장 전 이벤트를 방지/건너 뛰기/실행 취소하는 방법은 무엇입니까?
답변
수 없습니다. 당신이 묻고있는 의미는 아닙니다.
가짜 필드를 만들고 clean()
에 채울 수있는 작업은 다음과 같습니다.
Class MyModel(models.Model):
def clean(self):
self._modified = self.modified
...
@receiver(pre_save, sender=MyModel)
def receiver_(self, *args, **kwargs):
self.modified = self._modified
그래서 필드 값을 백업하고 나중에 다시 설정합니다. 노트 : 응용 프로그램이 나중에으로로드되었는지 확인하십시오. 결국
"당신의 어플리케이션이 나중에로드되었는지 확인하십시오"무엇보다? –
이 작업을 시도하고 다른'pre_save' 전에 실행됩니다 ... 어떻게 순서에 영향을 줍니까? –
주문에 영향을 미치지 않습니다. 그것이 실행 된 코드라고 생각하십시오. 어떻게 든 응용 프로그램의 코드가 타임 스탬프 확장자 *보다 나중에 * 실행되어야하므로 응용 프로그램에 대한'connect' (신호)를 호출하는 코드는 타임 스탬프 확장에서'connect'를 호출하는 코드 이후에 호출됩니다. –
, 방금 한 최종 주위 :
그것이 pre_save 신호가 사용자가 생성 한 경우from django.db import connection
cursor = connection.cursor()
cursor.execute("update %s set modified='%s' where id=%s" % (
my_model._meta.db_table, desired_modified_date, my_model.id))
, 당신은 할 수 없습니다 - 어쩌면 타임 스탬프를 무시하지하는 kwarg을 통과? 또는 타사 응용 프로그램의 신호 일 경우 모든 코드를 사용하지 말고 사용자 정의 코드로 자신을 만드십시오 - 면책 조항 - 이것은 단지 생각입니다. 나는 당신이 무엇을하려고 하는지를 이해하는 데 방해가 될 수 있습니다. – karthikr