Give every model created/modified timestamps
TimeStampedModel goes on UUIDModel, so all 28 domain models get row birthdays in one place. Without them the dashboard can only ever describe the present: "42 members" is knowable, "members joined this month" is not, and no metric can show direction. Order dropped its own created/modified -- redeclaring a field from an abstract base is an error, and its column survives as a plain AlterField (verbose_name only), so no order data moves. Note for reading early charts: auto_now_add backfills existing rows with a single migration timestamp, so everything that predates this commit shares one birthday and will show up as a spike at that instant rather than as real history. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
# Generated by Django 6.0.6 on 2026-07-13 22:51
|
||||
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('shop', '0009_applieddiscount_unique_discount_per_order'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='applieddiscount',
|
||||
name='created',
|
||||
field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2026, 7, 13, 22, 51, 35, 566202, tzinfo=datetime.timezone.utc), verbose_name='created'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='applieddiscount',
|
||||
name='modified',
|
||||
field=models.DateTimeField(auto_now=True, verbose_name='modified'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cart',
|
||||
name='created',
|
||||
field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2026, 7, 13, 22, 51, 35, 566218, tzinfo=datetime.timezone.utc), verbose_name='created'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cart',
|
||||
name='modified',
|
||||
field=models.DateTimeField(auto_now=True, verbose_name='modified'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cartitem',
|
||||
name='created',
|
||||
field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2026, 7, 13, 22, 51, 35, 566233, tzinfo=datetime.timezone.utc), verbose_name='created'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cartitem',
|
||||
name='modified',
|
||||
field=models.DateTimeField(auto_now=True, verbose_name='modified'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='discount',
|
||||
name='created',
|
||||
field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2026, 7, 13, 22, 51, 35, 566250, tzinfo=datetime.timezone.utc), verbose_name='created'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='discount',
|
||||
name='modified',
|
||||
field=models.DateTimeField(auto_now=True, verbose_name='modified'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='invoice',
|
||||
name='created',
|
||||
field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2026, 7, 13, 22, 51, 35, 566266, tzinfo=datetime.timezone.utc), verbose_name='created'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='invoice',
|
||||
name='modified',
|
||||
field=models.DateTimeField(auto_now=True, verbose_name='modified'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='orderline',
|
||||
name='created',
|
||||
field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2026, 7, 13, 22, 51, 35, 566282, tzinfo=datetime.timezone.utc), verbose_name='created'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='orderline',
|
||||
name='modified',
|
||||
field=models.DateTimeField(auto_now=True, verbose_name='modified'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='payment',
|
||||
name='created',
|
||||
field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2026, 7, 13, 22, 51, 35, 566299, tzinfo=datetime.timezone.utc), verbose_name='created'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='payment',
|
||||
name='modified',
|
||||
field=models.DateTimeField(auto_now=True, verbose_name='modified'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='product',
|
||||
name='created',
|
||||
field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2026, 7, 13, 22, 51, 35, 566314, tzinfo=datetime.timezone.utc), verbose_name='created'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='product',
|
||||
name='modified',
|
||||
field=models.DateTimeField(auto_now=True, verbose_name='modified'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='order',
|
||||
name='created',
|
||||
field=models.DateTimeField(auto_now_add=True, verbose_name='created'),
|
||||
),
|
||||
]
|
||||
@@ -142,8 +142,8 @@ class Order(ClubScopedModel):
|
||||
status = models.CharField(_("status"), max_length=255, choices=OrderStatus.choices, default=OrderStatus.PENDING)
|
||||
total = models.DecimalField(_("total"), max_digits=10, decimal_places=2)
|
||||
|
||||
created = models.DateTimeField(_("created at"), auto_now_add=True)
|
||||
modified = models.DateTimeField(_("modified"), auto_now=True)
|
||||
# `created`/`modified` come from TimeStampedModel — declaring them here as well
|
||||
# would clash with the abstract base.
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("order")
|
||||
|
||||
Reference in New Issue
Block a user