2013-05-23 2 views
1

저는 장고 초보자이며이를 사용하는 데 익숙해 져 있습니다. 또한 단위 테스트를 많이 믿습니다. 내가 테스트 클래스 내에서 django_admin.py inspectdb > models.pyDjango 단위 테스트, 알 수없는 열 오류

class Contracts(models.Model): 
    parent_id = models.IntegerField() 
    contract_num = models.CharField(max_length=10L, db_column='contract_num') 
    start_date = models.DateField() 
    end_date = models.DateField(null=True, blank=True) 
    org_name = models.CharField(max_length=100L, db_column='org_name')  
    class Meta: 
    db_table = 'contracts' 

를 사용하여 모델 클래스를 정의

parent_id int 
contract_num varchar 
start_date date 
end_date date 
org_name varchar 

필드와 샘플 데이터베이스 테이블 contracts 감안할 때

, 나는

def setUp(self): 
    self.contracts = Contracts(parent_id = 300, contract_num = "1234", start_date = timezone.now(), end_date = None, org_name = "TestContractName") 


def test_contracts_access(self): 
    self.contracts.save() 
    getContracts = Contracts.objects.get(parent_id = 300) 

    self.assertEqual(getContracts.org_name, "TestContractName") 
    self.assertEqual(getContracts.contract_num, "1234") 
    self.assertEquals(getContracts.contract_num, "12") 


    getContracts.org_name = "TestContractNameUpdate" 
    getContracts.save() 

    updateContract = Contracts.objects.get(contract_num = "1234") 
    self.assertEqual(updateContract.org_name, "TestContractNameUpdate") 

정의 이 테스트를 실행하면 데이터베이스 오류 1054가 발생합니다. "알 수없는 공동 "필드 목록에 contracts.id. 그게 정확히 무슨 뜻입니까? 스택 추적의 첫 번째 오류는 첫 번째 저장 직후 get 호출입니다.

사실, 다른 모델 객체에 대해 똑같은 테스트가 설정되어 있고 그 중 하나가 통과합니다.

+2

데이터베이스에 기본 키가 설정되어 있습니까? 사용자 정의 필드 인 경우 모델에있는 모델을 지정해야 할 수도 있습니다. 그렇지 않으면 django가 'id'필드를 찾습니다. 다른 작업 모델은 어떤 모습입니까? @mshell_lauren과 일치하는 https://docs.djangoproject.com/en/dev/topics/db/models/#automatic-primary-key-fields –

+0

Django는 기본적으로 "id"로 기본 키를 가질 것이고, 필드 정의의 기본 필드 인'primary_key = True '를 오버라이드 할 수 있습니다. –

+0

@mshell_lauren, 사용자가 답변으로 의견을 작성하면이를 수락합니다. 감사. – Jason

답변

1

데이터베이스에 설정된 기본 키를 확인하십시오. "id"로 레이블이 지정되지 않은 필드에 기본 키가있는 경우 (나는 parent_id ...을보고 있습니다), 모델에서이 키를 설정해야합니다. 당신이 하나가되었는지와 기본 키라고 가정하면, 이렇게하지 않으면

field_name = models.AutoField(primary_key=True) 

, 다음 장고 필드 "ID"를 찾습니다 : 당신은이 작업을 수행 할 수 있습니다. 존재하지 않는 contracts.id을 찾고 있기 때문에이 오류가 발생했다고 생각합니다!

Django 문서를 primary-key-fieldslegacy databses에서 확인하십시오.