2009-05-08 7 views
2

데이터베이스 레코드를 읽고 변경하고 저장 한 장고 관리자가 두 명 (또는 그 이상) 있다고 가정합니다. 데이터베이스에 문제는 없지만 일부 관리자는 쓴 기록을 덮어 쓴 것이 놀랄 것입니다.어떻게 장고 관리에서 쓰기 충돌을 피할 수 있습니까?

이 문제가 해결 되었습니까? 한 가지 방법은 명시 적으로 "진행중인 편집"버튼을 사용하여 레코드에 플래그를 설정하는 것입니다. 다른 관리자가 동일한 레코드를 읽고 "진행중인 편집"을 클릭하면 이전 편집이 진행 중임을 경고합니다. 또는 레코드가 저장 될 때 증가되는 레코드에 필드를 추가 할 수 있습니다. 필드가 레코드를 읽었을 때와 다른 경우 관리자는 레코드를 읽은 후 다른 사람이 레코드를 변경했다는 경고를받습니다.

이것을 처리 할 수있는 고유 한 장고 방법이 있습니까?

+0

좋은 질문. 불행히도 나는 이런 기능이 없다는 것을 두려워합니다. –

답변

2

Django 관리자는 즉시 쓰기 충돌 방지 기능을 구현하지 않습니다. 직접 추가하는 것은 어렵지 않습니다. 개인적으로, "버전 번호 필드"접근 방식을 취할 것입니다.

+0

django-concurrency는 정확히 다음과 같은 메커니즘을 제공합니다 : https://django-concurrency.readthedocs.org/en/latest/index.html – GrantJ

0

일반적으로 데이터베이스의 트랜잭션 격리 기능을 읽고 싶은 곳입니다. 데이터베이스의 트랜잭션 격리 기능을 사용하기 때문입니다.

실제로 그렇게하지 않으려는 경우 응용 프로그램 계층에서이를 수행하기위한 다양한 패턴이 있지만,이를 수행 할 정규 방법이 없습니다. 어떤 사람들은 일종의 "마지막 액세스"타임 스탬프를 설정하고 거부합니다. 그 후 일정 기간 동안 편집을 허용하고, 다른 버전 번호 등을 설정하십시오.

+0

Erm ... 무엇? 별도의 HTTP 요청을 통해 DB 트랜잭션을 유지할 것을 제안 하시겠습니까? 그렇지 않으면 DB 트랜잭션은 "두 관리자가 같은 관리자 페이지를로드 할 때 응답을 제공하지 않고 다른 관리자가 다른 관리자를 덮어 씁니다." 데이터베이스는 고립 된 트랜잭션을 행복하게 유지하고, 마지막에 저장 한 사람이 저장 한 상태를 저장하는 것과 정확히 똑같이 수행합니다. 여기에는 앱 수준 솔루션 만 사용할 수 있습니다. –

관련 문제