from django.contrib.auth.models import User
from django.db import models
from django.db.models import fields
from django.utils import timezone


class Transaction(models.Model):
    EXPENSE = 'exp'
    INCOME = 'inc'
    CATEGORY_CHOICES = (
        (EXPENSE, 'expense'),
        (INCOME, 'income'),
    )

    title = fields.CharField(max_length=255)
    amount = fields.DecimalField(max_digits=10, decimal_places=2)
    category = fields.CharField(max_length=3, choices=CATEGORY_CHOICES)
    created = fields.DateTimeField(auto_now=True)
    modified = fields.DateTimeField(default=timezone.now)
    user = models.ForeignKey(User)

    def __str__(self):
        return "{}".format(self.title)

from django.contrib.auth.models import User
from django.db import models
from django.db.models import fields
from django.utils import timezone


class Transaction(models.Model):
    EXPENSE = 'exp'
    INCOME = 'inc'
    CATEGORY_CHOICES = (
        (EXPENSE, 'expense'),
        (INCOME, 'income'),
    )

    title = fields.CharField(max_length=255)
    amount = fields.DecimalField(max_digits=10, decimal_places=2)
    category = fields.CharField(max_length=3, choices=CATEGORY_CHOICES)
    created = fields.DateTimeField(default=timezone.now, editable=False)
    modified = fields.DateTimeField(default=timezone.now)
    user = models.ForeignKey(User)

    def __str__(self):
        return "{}".format(self.title)

Set created time with default callback
Set created time with default callback

auto_now is evil, as any editing and overriding is
almost completely impossible (e.g. unittesting)
