문제

class dbview(models.Model):
    # field definitions omitted for brevity
    class Meta:
        db_table = 'read_only_view'

def main(request):
    result = dbview.objects.all()

렌더링하는 동안 예외를 발견했습니다 : (1054, "알 수없는 열 'read_only_view.ID''필드 목록 ' ")

거기 있습니다 기본 키가 없습니다 나는보기에서 볼 수있다. 해결 방법이 있습니까?

논평:
나는 Django와 함께 접근하는 견해를 통제 할 수 없습니다. MySQL 브라우저에는 기본 키가 없지만 기본 키가 표시되지 않습니다.

도움이 되었습니까?

해결책

당신이 '나는'내가 Django와 함께 접근하는 견해를 통제 할 수 없다고 말할 때. MySQL 브라우저에는 기본 키가 없지만 기본 키는 표시되지 않습니다. '

나는 이것이 레거시 테이블이고 열을 추가하거나 변경할 수 없다는 것을 의미한다고 생각하십니까?

그렇다면 실제로 기본 키가 없다면 (문자열 또는 비 인쇄 열*조차도) 테이블이 잘 설정되지 않았으며 성능이 잘 어울릴 수 있습니다.

그래도 당신에게는 중요하지 않습니다. 필요한 것은 모든 행에 고유 한 열만 있으면됩니다. 모델에서 'Primary_key = true로 설정하면 Django가 행복 할 것입니다.

  • 문제가 될 다른 가능성이 하나 있습니다. 고유 한 열이없는 경우 테이블은 복합 기본 키를 사용하는 것일 수 있습니다. 즉, 두 개의 열이 함께 사용되면 고유 한 기본 키를 제공 할 수 있습니다. 이것은 완벽하게 유효한 관계형 모델링이지만 불행히도 Django는 지원하지 않습니다. 이 경우 다른 열을 추가 할 수 없다면 RAW SQL 이외의 일을 많이 할 수 없습니다.

다른 팁

이 문제가 항상 있습니다. 변경할 수 없거나 변경하고 싶지 않다는 견해가 있지만 복합 정보를 표시 할 페이지가 있습니다 (관리 섹션에있을 수 있습니다). 저장을 무시하고 NotimplementEderror를 높입니다.

    def save(self, **kwargs):
        raise NotImplementedError()

(대부분의 경우에는 이것이 필요하지 않지만 조금 나아질 것입니다)

또한 메타 클래스에서 거짓으로 설정했습니다.

    class Meta:
       managed = False

그런 다음 필드를 선택하여 기본 키로 태그를 지정합니다. 페이지에 정보를 표시하기 위해 필터를 작성하는 것이 정말 독특하다고 여부는 중요하지 않습니다.

나를 위해 잘 작동하는 것 같습니다. 내가 간과하고있는이 기술에 문제가 있다면 커밋하십시오.

실제로 있다면 기본 키가 없습니다 관점에서는 해결 방법이 없습니다.

Django는 각 모델에 정확히 하나의 필드가 있어야합니다 primary_key=True.

자동 생성이 있어야합니다 id 당신이 달렸을 때 필드 syncdb (모델에 정의 된 기본 키가 없으면 Django는 AutoField 당신을 위한).

이 오류는 Django가 귀하의 데이터베이스를 id 필드이지만 존재하지 않습니다. 당신은 달릴 수 있습니다 django manage.py dbshell 그리고 DESCRIBE read_only_view; 결과를 게시 하시겠습니까? 데이터베이스에있는 모든 열이 표시됩니다.

또는 제외한 모델 정의를 포함시킬 수 있습니까? (그리고 당신이 실행 한 이후 모델 정의를 변경하지 않았 음을 확인 syncdb?)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top