2017-12-25 3 views
0

본질적으로 나는 pcaps 속성으로 채워지는 몇 개의 테이블을 생성하려고합니다. 꽤 이상한 오류가 발생했습니다. 이 모델 클래스의 코드입니다 :Django 모델 - 'Pcaps.uuid'는 외래 키에 의해 참조되기 때문에 unique = True로 설정해야합니다.

class Pcaps(models.Model): 
    uuid = models.CharField(max_length=50) 
    filename = models.CharField(max_length=200, default='') 
    datetime = models.DateTimeField(default=datetime.now, blank=True) 
    filehash = models.ForeignKey(Malwares, to_field="filehash", 
db_column="filehash") 

class PcapsIps(models.Model): 
    domainname = models.CharField(max_length=100) 
    ip = models.CharField(max_length=100) 
    uuid = models.ForeignKey(Pcaps, to_field="uuid", db_column="uuid") 

class PcapsPorts(models.Model): 
    number = models.CharField(max_length=100) 
    uuid = models.ForeignKey(Pcaps, to_field="uuid", db_column="uuid") 

다음과 같이 문제의 오류는 다음과 같습니다

오류 : 당신은 이해해야

analyser.PcapsIps.uuid: (fields.E311) 'Pcaps.uuid' must set unique=True 
because it is referenced by a foreign key. 
analyser.PcapsPorts.uuid: (fields.E311) 'Pcaps.uuid' must set unique=True because it is referenced by a foreign key. 
+2

왜 이상합니까? 오류는 매우 명확합니다. 외래 키는 고유해야합니다. –

답변

1

어떻게 후드 아래 외래 키의 작품, 즉 당신이 사용하고있는 데이터베이스 시스템에서. 외래 키는 다른 (또는 같은) 테이블의 행을 고유하게 식별하는 한 테이블 (장고 모델에 해당)의 필드 (또는 필드 모음)입니다. 일반적으로이 작업은 고유 키로 보장되므로 기본 키로 수행됩니다. 이유가 있다면 다른 테이블/모델의 다른 행을 참조하도록 to_field을 설정할 수 있지만 해당 필드도 고유해야합니다. 따라서 다음이 필요합니다

uuid = models.CharField(unique=True, max_length=50) 

편집 : 당신이 장고 1.8 이상을 사용하는 경우 아, 그런데, 그것은 지금 UUIDField 있습니다. here

관련 문제