django模型的字符串表示形式,仅显示非默认模型字段

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

如果我有一个模型,其中有许多字段具有默认值,那么有没有办法将字符串表示配置为仅显示非默认值。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 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)