Skip to content

Instantly share code, notes, and snippets.

@resalisbury
Created November 8, 2016 19:15
Show Gist options
  • Save resalisbury/958001d8f04536a4e9d31f3d24de5dcd to your computer and use it in GitHub Desktop.
Save resalisbury/958001d8f04536a4e9d31f3d24de5dcd to your computer and use it in GitHub Desktop.
from django.template import engines
class ReprMixin(object):
TEMPLATE = """<{{ class }}{% for field, value in fields_values %}
{{ field }}={{ value }}{% endfor %}>"""
def __repr__(self):
django_engine = engines['django']
template = django_engine.from_string(self.TEMPLATE)
fields = [field.name for field in self._meta.fields]
values = [getattr(self, field) for field in fields]
fields_values = zip(fields, values)
context = {
'class': self.__class__.__name__,
'fields_values': fields_values,
}
return template.render(context=context)
def __str__(self):
return self.__repr__()
# example
# class Dish(ReprMixin, models.Model):
# item = models.CharField(max_length=40, blank=False, null=False)
# quantity = models.PositiveIntegerField()
# >>> dish = dish.objects.first()
# >>> print dish
# <Dish
# id=1
# item=bacon
# quantity=2>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment