0
有時ForeignKey字段需要默認值。例如:處理函數django模型字段默認值的最佳方法是什麼?
class ReleaseManager(BaseManager):
def default(self):
return self.filter(default=True).order_by('-modified').first()
class Release(BaseModel):
default = models.BooleanField(default=False)
...
class Server(models.Model):
...
release = models.ForeignKey(Release, null=True, default=Release.objects.default)
一切都很好,與上面的代碼好,直到時機成熟的數據庫遷移於是功能默認情況下會導致很大的問題,因爲默認的功能不能被序列化。手動遷移可以解決這個問題,但是在一個大型項目中,定期遷移可能是squashed,這會給不知情的人留下一個定時炸彈。
一個常見的解決方法是將默認值從字段移動到模型的保存方法,但如果模型由rest framework之類的東西使用或者在字段中創建期望默認值的表單時會導致混淆。