django模型的字符串表示形式,仅显示非默认模型字段
如果我有一个模型,其中有许多字段具有默认值,那么有没有办法将字符串表示配置为仅显示非默认值。i、 e:django模型的字符串表示形式,仅显示非默认模型字段,django,django-models,Django,Django Models,如果我有一个模型,其中有许多字段具有默认值,那么有没有办法将字符串表示配置为仅显示非默认值。i、 e: from django.db import models class Config(models.Model): debug = models.IntegerField(default=7) retry = models.BooleanField(default=True) def __unicode__(self): # here i
from django.db import models
class Config(models.Model):
debug = models.IntegerField(default=7)
retry = models.BooleanField(default=True)
def __unicode__(self):
# here is where the magic would go
# if debug is at default value (7), do no show it, otherwise skip
config_str = ['generic config']
for field in self._meta.get_all_field_names():
config_str.append('%s=%s' % (field, getattr(self, field, None)))
return ' '.join(config_str)
这样,strconfig=True,debug=7将是“generic config”,而strconfig=True,debug=8将是“generic config debug=8”类似的东西似乎正在完成这项工作。如果有更好的方法,请告诉我:
def __unicode__(self):
config_details = ['generic config']
for field_name in self._meta.get_all_field_names():
# it is important to list all related objects here too,
# otherwise strange things may happen
if field_name in ('id', ):
continue
value = getattr(self, field_name, '')
default_value = self._meta.get_field(field_name).get_default()
if (value !=default_value):
det_str = '%s=%s' % (field_name, value)
config_details.append(det_str)
return ' '.join(config_details)