以下是我結束瞭解決這一問題。
首先一些先決條件:我有現成的代碼訪問這些字段名稱(例如'color'),並且該字段也作爲API的一部分被序列化(通過django-rest-interface)。這些東西都不能改變。
嘗試屬性方法工作正常,但colour
不再是一個領域,所以沒有序列化。結果:破API
然後轉移到保存()的解決方案,對每個字段的自定義屬性,它的行爲應該像這樣一起:
class ColourChoices(models.Model):
colour1 = models.CharField()
colour1.colour_default = "red"
colour2 = models.CharField()
colour2.colour_default = "blue"
def save(self, *args, **kwargs):
# force colour fields to default values
for f in [ x for x in self._meta.fields if hasattr(x, 'colour_default') ]:
if self.__getattribute__(f.attname) == "":
self.__setattr__(f.attname, f.colour_default)
super(ColourChoices, self).save(*args,**kwargs)
現在一切工作正常,並根據需要。
此解決方案的唯一問題是,如果默認值發生更改,則無法確定哪些數據庫字段應該更新默認值,哪些只是意外地與舊默認值相同。但對於我的申請,我可以忍受這一點。
這改變了存儲的值,這不是我想要發生的 – 2010-01-28 20:32:54