有一個古老的代碼如下所示兩種型號:Django的增量ID分別
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)
,這將導致該領域的「身份證」的衝突,因爲Django的不允許覆蓋在子類車型領域。
我也嘗試添加不同的下拉列表AutoField在水果模式「BASE_ID」,因爲在父模型的ID是不會被使用的。但後來我得到「django.db.utils.ProgrammingError:關於‘水果試圖運行南makemigrations時’已經存在」的錯誤。
據我所知,重編的所有ID,並分享他們與所有子類的模型可以解決問題,但我會盡量避免這種方法,因爲這些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 Meta:
abstract = True
使其成爲您在使用它之前,它的子類的抽象方法:
你爲什麼有西瓜和梨不同模型擺在首位的時候,幾乎所有的領域都在兩個相同的?難道你不能簡單地擁有一個FRUIT模型,並在其中指定一個名爲Fruit_name的屬性。 –
我的問題是關於老改進代碼和數據遷移所以沒有什麼可以過去做。水果的事情就是一個例子。實際的子類模型有更多特定的領域。 – benny