2017-12-25 19 views
0

本質的には、私はpcapの属性で設定されたいくつかのテーブルを作成しようとしています。私はかなり奇妙なエラーを受けています。これは、モデルクラスのコードされて次のようにDjangoモデル - 'Pcaps.uuid'は、外部キーによって参照されるので一意= 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

あなたが外部キーはボンネットの下にどのように動作するかを理解する必要があり、すなわち、あなたが使用しているデータベースシステムであれば。外部キーは、別の(または同じ)テーブルの行を一意に識別する1つのテーブル(Djangoモデルに対応)のフィールド(またはフィールドのコレクション)です。通常、プライマリキーによって行われます。プライマリキーは一意であることが保証されているためです。そのような理由がある場合は、to_fieldを別のテーブル/モデルの別の行を参照するように設定できますが、そのフィールドも一意でなければなりません。したがって、次のものが必要です。

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

EDIT:あなたはDjangoの1.8以降を使用している場合ああ、ところで、それは今UUIDFieldを持っています。 here

関連する問題