주석에 쓰여있는 것. 장고 모델을 읽기 전용으로 만드는 방법이 있습니까?Django 모델을 읽기 전용으로 만드시겠습니까?
이것은 일단 레코드가 생성되면 편집 할 수없는 장고 모델을 의미합니다.
트랜잭션 기록을 기록하는 모델에 유용합니다.
주석에 쓰여있는 것. 장고 모델을 읽기 전용으로 만드는 방법이 있습니까?Django 모델을 읽기 전용으로 만드시겠습니까?
이것은 일단 레코드가 생성되면 편집 할 수없는 장고 모델을 의미합니다.
트랜잭션 기록을 기록하는 모델에 유용합니다.
당신은 당신이 모든 변경 사항을 저장하지 않습니다이 경우의 메소드를 저장하고 기존 엔티티인지 확인 모델을 재정의 할 수
def save(self, *args, **kwargs):
if self.id is None:
super(ModelName, self).save(*args, **kwargs)
엔티티가있다 그래서이 예제에서 당신은 단지 변경 사항을 저장 id
이 아직 없습니다. 아직 삽입되지 않은 새로운 엔티티 인 경우에만 해당됩니다.
저장 방법을 무시하고 원하는 경우 super를 호출 할 수 없습니다. 이것은 이것을 달성하는 상당히 쉬운 방법 일 것입니다. 삭제 또는 업데이트는 단순히 반환하는 대신 발생을 시도하는 경우
# blatantly ripped the save from another answer, since I forgot to save original model
def save(self, *args, **kwargs):
if self.id is None:
super(ModelName, self).save(*args, **kwargs)
def delete(self, *args, **kwargs):
return
아마 당신도 예외를 발생한다. 당신은 무슨 일이 일어나고 있는지를 사용자에게 알려주고 싶습니다 - 그 행동은 유효하지 않습니다.
먼저 해당 모델의 인스턴스를 어떻게 만듭니 까? –
예 ID 체크가 업데이트인지 저장인지 확인하는 것을 잊어 버렸습니다. 답변을 업데이트했습니다. –
업데이트/삭제에 대한 예외를 throw하여 사용자에게 알리는 제안에 +1. –
은 : 당신의 주요 목표는 관리자에서 쓰기 액세스를 방지하는 경우 아무도 추가/변경 허가가되지 않도록, 당신은 사용 관리 클래스를 수정할 수 있습니다
class HistoryAdmin(admin.ModelAdmin):
def has_add_permission(self, request):
return False
def has_change_permission(self, request, obj=None):
return False
def has_delete_permission(self, request, obj=None):
return False
읽기 전용은 여전히 읽기 전용임을 의미합니다. 변경 권한을 제거하면 더 이상 해당하지 않습니다. – webjunkie
만약 당신 돈 자동으로 실패하도록 레코드를 수정하려는 시도가 필요합니다.
def save(self, *args, **kwargs):
if self.pk:
(raise an exception)
super(YourModel, self).save(*args, **kwargs)
def delete(self, *args, **kwargs):
(raise an exception)
올바르지 않습니다. 테이블에 존재하지 않는'Non 'ID도 새로운 레코드가됩니다. –
@ 이냐시오 : 네가 맞다고 생각해. 엔티티를 저장하기 전에 누군가 id 속성을 설정할 수 있습니다.이 경우 id는 None이 아닙니다. –
@tomload : 해당 ID를 가진 항목이 이미 존재하는지 확인해야합니다 ... –