From 462852c3f35148ce2faf8854f87c776b6a00a3df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Tue, 15 Sep 2026 11:46:51 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20VisitSession=20=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=88=B3=E6=81=A2=E5=A4=8D=20NOT=20NULL=EF=BC=8C=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E8=A1=A5=E6=98=BE=E5=BC=8F=E6=97=B6=E9=97=B4=EF=BC=88?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=AE=A1=E5=88=92=E7=9A=84=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=AC=94=E8=AF=AF=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Code --- server/tracker/migrations/0001_initial.py | 6 +++--- server/tracker/models.py | 5 ++--- server/tracker/tests/test_models.py | 3 ++- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/server/tracker/migrations/0001_initial.py b/server/tracker/migrations/0001_initial.py index b551169..375fd65 100644 --- a/server/tracker/migrations/0001_initial.py +++ b/server/tracker/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.2.17 on 2026-09-15 03:44 +# Generated by Django 5.2.17 on 2026-09-15 03:46 import django.db.models.deletion import tracker.models @@ -65,8 +65,8 @@ class Migration(migrations.Migration): fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('session_id', models.CharField(max_length=64)), - ('started_at', models.DateTimeField(blank=True, null=True)), - ('ended_at', models.DateTimeField(blank=True, null=True)), + ('started_at', models.DateTimeField()), + ('ended_at', models.DateTimeField()), ('referrer_domain', models.CharField(blank=True, default='', max_length=200)), ('utm', models.JSONField(blank=True, default=dict)), ('landing_path', models.CharField(blank=True, default='', max_length=500)), diff --git a/server/tracker/models.py b/server/tracker/models.py index 84dedf0..ee51b25 100644 --- a/server/tracker/models.py +++ b/server/tracker/models.py @@ -56,9 +56,8 @@ class VisitSession(models.Model): site = models.ForeignKey(Site, on_delete=models.CASCADE, related_name="sessions") visitor = models.ForeignKey(Visitor, on_delete=models.CASCADE, related_name="sessions") session_id = models.CharField(max_length=64) - # null=True:会话可先建行后回填时间(ended_at 为空表示会话进行中) - started_at = models.DateTimeField(null=True, blank=True) - ended_at = models.DateTimeField(null=True, blank=True) + started_at = models.DateTimeField() + ended_at = models.DateTimeField() referrer_domain = models.CharField(max_length=200, blank=True, default="") utm = models.JSONField(default=dict, blank=True) landing_path = models.CharField(max_length=500, blank=True, default="") diff --git a/server/tracker/tests/test_models.py b/server/tracker/tests/test_models.py index 601dc81..ecd5777 100644 --- a/server/tracker/tests/test_models.py +++ b/server/tracker/tests/test_models.py @@ -18,7 +18,8 @@ def test_visitor_first_touch_fields(): def test_event_unique_site_event_id(): site = Site.objects.create(name="s", domains=["a.com"]) v = Visitor.objects.create(site=site, visitor_id="vid1") - s = VisitSession.objects.create(site=site, visitor=v, session_id="sid1") + s = VisitSession.objects.create(site=site, visitor=v, session_id="sid1", + started_at="2026-09-15T10:00:00Z", ended_at="2026-09-15T10:01:00Z") Event.objects.create(site=site, visitor=v, session=s, event_id="e1", event_name="page_view", occurred_at="2026-09-15T10:00:00Z", path="/") with pytest.raises(Exception):