考慮爲了定義ForeignKey關係而需要CHAR字段primary_key的情況。在Django模型中不使用默認的「id」primary_key會產生什麼影響?
經過一番初步調查我已經確定了以下可能性,每一個都有自己的缺點:
1)使用「primary_key =真」。
Example 1:
class Collection(models.Model):
code = models.CharField(primary_key=True, max_length=3)
class Item(models.Model):
code = models.CharField(primary_key=True, max_length=255, unique=True)
collection = models.ForeignKey('Collection', related_name='items')
潛在的缺點:整合第三方應用程序時,某些第三方應用程序的Django依賴於默認的「身份證」 PK整型字段可能會導致問題。
2)改用'to_field'/'through'選項。
Example 2:
class Collection(models.Model):
code = models.CharField(Max_length=3, unique=True)
class Item(models.Model):
collection = models.ForeignKey('Collection', to_field='code', related_name='items')
這將使「系列」有其自己的ID primary_key,所以它解決了與第三方應用程序的Django很好打的問題。
潛在的缺點:經過進一步調查,我發現了以下開放Django的ORM門票和錯誤至於處理在FK CHAR/INT primary_keys和many-to-many關係的組合。
http://code.djangoproject.com/ticket/11319和13343
結論:
選項1比選項2
但是更好:
是依賴於整數primary_key有許多第三方應用程序?
是否有這個限制的簡單解決方法?
使用CHAR primary_key還有其他什麼缺點嗎?
嗨伊格納西奧,你有沒有到GenericForeignKeys要求外國PK的同一類型的事實的內容? – AtlasStrategic 2010-10-07 07:23:32
沒有,但可以從一個事實,即第二個參數'GenericForeignKey'構造是一個字段的名稱派生,那場只能有一個單一的類型。 – 2010-10-07 07:25:58