Class ModelInfo for show object info

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
from django.utils.safestring import mark_safe
from django.db import models
from django.template.defaultfilters import yesno, linebreaksbr, urlize
from django.utils.translation import get_date_formats
from django.utils.text import capfirst
from django.utils import dateformat

class ModelInfo(object):
    class _Meta:
        model = None
        fields = ()
        exclude = ()
        sections = None
        row_template = '<tr><th>%s</th><td>%s</td></tr>'
        show_if_none = False
        auto_urlize = True
        auto_linebreaks = True

    def __init__(self, instance, *args, **kwargs):
        self.instance = instance

        self._meta = self.Meta()
        _meta = self._Meta()

        for attr in ('model','fields','exclude','sections','row_template','show_if_none',
                'auto_urlize','auto_linebreaks',):
            if not hasattr(self._meta, attr):
                setattr(self._meta, attr, getattr(_meta, attr))

    def get_model_fields(self):
        return [f.name for f in self._meta.model._meta.fields \
                if f.name != 'id' and \
                (f.name in self._meta.fields or \
                not f.name in self._meta.exclude)\
                ]

    def get_field(self, f_name):
        return [f for f in self._meta.model._meta.fields if f.name == f_name][0]

    def get_field_display_text(self, f_name):
        return self.get_field(f_name).verbose_name

    def get_field_display_value(self, f_name):
        field = self.get_field(f_name)

        try:
            return getattr(self, 'get_%s_value'%f_name)
        except:
            pass

        f_value = getattr(self.instance, f_name)

        if f_value is None:
            return None

        if callable(f_value):
            return f_value()
        
        if isinstance(f_value, models.Model):
            if self._meta.auto_urlize and hasattr(f_value, 'get_absolute_url'):
                return '<a href="%s">%s</a>'%(f_value.get_absolute_url(), f_value)
            else:
                return unicode(f_value)

        if field.choices:
            return dict(field.choices).get(f_value, None)

        if isinstance(field, models.BooleanField):
            return yesno(f_value)

        date_format, datetime_format, time_format = get_date_formats()

        if isinstance(field, models.DateTimeField):
            return capfirst(dateformat.format(f_value, datetime_format))

        if isinstance(field, models.TimeField):
            return capfirst(dateformat.time_format(f_value, time_format))

        if isinstance(field, models.DateField):
            return capfirst(dateformat.format(f_value, date_format))

        if isinstance(field, models.TextField):
            if self._meta.auto_urlize: f_value = urlize(f_value)
            if self._meta.auto_linebreaks: f_value = linebreaksbr(f_value)

        return f_value

    def as_string(self):
        ret = []

        sections = self._meta.sections or ((None, self._meta.fields or self.get_model_fields()),)

        for s_name, s_fields in sections:
            if s_name:
                ret.append(self._meta.row_template%('&nbsp;', '<h3>%s</h3>'%s_name))
                
            for f_name in s_fields:
                f_display = self.get_field_display_text(f_name)
                f_display = f_display[0] == f_display[0].lower() and f_display.capitalize() or f_display

                f_value = self.get_field_display_value(f_name)

                if self._meta.show_if_none or f_value is not None:
                    ret.append(self._meta.row_template%(f_display, f_value))

        return mark_safe('\n'.join(ret))

    def __unicode__(self):
        return self.as_string()

More like this

  1. ModelForm Class saving m2m by ckarrie2 1 year, 7 months ago
  2. Custom DateField To Handle Credit Card Exp Date. Format: MM/YY by pjs 4 years, 10 months ago
  3. SectionedForm by marinho 4 years, 11 months ago
  4. Readonly fields on Form/Modelform by Killarny 4 years, 2 months ago
  5. RangeField and RangeWidget by marinho 4 years, 7 months ago

Comments

marinho (on July 4, 2008):

Fixed methods get_model_fields and get_field

#

wandersean (on August 18, 2010):

I'm using this, thanks marinho.

One question: It's been a while since you posted this, are you still using it, or is there now a better way to get this info easily?

#

siblek31 (on April 13, 2013):

Lingkungan sering disebut sebagai faktor penting yang mempengaruhi status kesehatan individu. Ini termasuk karakteristik lingkungan alam, lingkungan yang dibangun, dan lingkungan sosial. Faktor-faktor seperti air bersih dan udara, perumahan yang layak, dan komunitas yang aman dan jalan semuanya telah ditemukan untuk berkontribusi untuk kesehatan yang baik, terutama bagi kesehatan bayi dan anak. [8] [18] Beberapa penelitian telah cara mendapatkan uang dari internet menunjukkan bahwa kurangnya lingkungan ruang rekreasi termasuk lingkungan alam mengarah ke tingkat yang lebih rendah kepuasan pribadi dan tingkat yang lebih tinggi obesitas, terkait dengan menurunkan kesehatan secara keseluruhan dan kesejahteraan. [19] Hal ini menunjukkan bahwa manfaat kesehatan yang positif ruang alam di lingkungan perkotaan harus diperhitungkan di depan umum kebijakan dan penggunaan lahan.

Genetika, atau sifat cara cepat hamil diwariskan dari orang tua, juga berperan dalam menentukan status kesehatan individu dan populasi. Hal ini dapat mencakup baik kecenderungan terhadap penyakit tertentu dan soal ulangan sd kondisi kesehatan, serta kebiasaan dan perilaku individu berkembang melalui belajar bahasa inggris cepat gaya hidup keluarga mereka. Sebagai contoh, kursus bahasa inggris online genetika mungkin memainkan peran dalam cara di mana orang mengatasi stres, baik mental, emosional atau fisik. (Salah satu kursus teknisi komputer kesulitan adalah isu yang diangkat oleh perdebatan kekuatan relatif genetika dan dimana lagi faktor lainnya, interaksi antara genetika dan lingkungan mungkin penting tertentu.)

#

(Forgotten your password?)