以下に示す 2 つのモデルの古いコードがあります。
class Watermelon(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=64, default='Unnamed Watermelon')
is_allegic = models.BooleanField(default=False)
use_by = models.DateTimeField()
seedless = models.BooleanField(default=False)
class Pear(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=64, default='Unnamed Pear')
is_allegic = models.BooleanField(default=False)
use_by = models.DateTimeField()
round_shape = models.BooleanField(default=False)
ここで、一般的なフルーツ検索関連の関数が必要なので、古いデータの元の ID 番号を乱すことなく、モデルの継承を使用しようとしています。
class Fruit(models.Model):
name = models.CharField(max_length=64, default='Unnamed Fruit')
is_allegic = models.BooleanField(default=False)
use_by = models.DateTimeField()
class Watermelon(Fruit):
id = models.AutoField(primary_key=True)
seedless = models.BooleanField(default=False)
class Pear(Fruit):
id = models.AutoField(primary_key=True)
round_shape = models.BooleanField(default=False)
これにより、フィールド 'id' の競合が発生します。これは、django がサブクラス モデルのフィールドをオーバーライドすることを許可していないためです。
親モデルの ID はまったく使用されないため、別の AutoField 'base_id' を Fruit モデルに追加しようとしました。しかし、南の makemigrations を実行しようとすると、「django.db.utils.ProgrammingError: relationship "Fruit" already exists」というエラーが表示されます。
すべての ID を再番号付けしてすべてのサブクラス モデルと共有することで問題が解決することは理解していますが、これらの ID は他のテーブルによって既に参照されており、他のシステムでも使用されているため、この方法は避けようとしています。
アドバイスをいただければ幸いです。