我想遍歷Django模型中的模型字段,並檢查它們是否爲空字符串,並以編程方式在模型save()方法中用null替換它們。這是因爲一些CharFields需要是唯一的或沒有價值。Django:自動將模型字段中的空字符串設置爲None?
實施例:
class Person(models.Model):
name = models.CharField(blank=True, unique=True, null=True)
nick_name = models.CharField(blank=True, unique=True, null=True)
...
age = models.IntegerField()
def save(self, *args, **kwargs):
for field in self._meta.fields: # get the model fields
if field=='':
field = None
super(Person, self).save(*args, **kwargs)
上面抱怨一個creation_counter爲什麼來比較這些值,而不是與空字符串字段值試圖完成它是不清楚的。
這可以手工完成,但我有太多的機型....
有什麼建議?編輯: 感謝大家誰試圖幫助我! :D
似乎對我有用的解決方案由Jazz發佈,但他的代碼未顯示在他的帖子中。這是我的版本,這是基本相同的,但有一個額外的檢查,以確保我們只覆蓋在必要時:
from django.db.models.Field import CharField as _CharField
class CharField(_CharField):
def get_db_prep_value(self, value, *args, **kwargs):
if self.blank == self.null == self.unique == True and value == '':
value = None
return super(CharField).get_db_prep_value(value, *args, **kwargs)
_meta.fields可能包含的不僅僅是模型字段。你有沒有在個別領域嘗試過這種方法?另外,確切的錯誤信息是什麼? – Ted