Plain is headed towards 1.0! Subscribe for development updates →

 1import uuid
 2
 3from plain import models
 4
 5
 6@models.register_model
 7class Pageview(models.Model):
 8    uuid = models.UUIDField(default=uuid.uuid4)
 9
10    url = models.URLField(max_length=1024)
11    timestamp = models.DateTimeField(auto_now_add=True)
12
13    title = models.CharField(max_length=512, required=False)
14    # Referrers may not always be valid URLs (e.g. `android-app://...`).
15    # Use a plain CharField so we don't validate the scheme or format.
16    referrer = models.CharField(max_length=1024, required=False)
17
18    user_id = models.CharField(max_length=255, required=False)
19    session_key = models.CharField(max_length=255, required=False)
20
21    class Meta:
22        ordering = ["-timestamp"]
23        indexes = [
24            models.Index(fields=["timestamp"]),
25            models.Index(fields=["user_id"]),
26            models.Index(fields=["session_key"]),
27            models.Index(fields=["url"]),
28        ]
29        constraints = [
30            models.UniqueConstraint(
31                fields=["uuid"], name="plainpageviews_pageview_unique_uuid"
32            ),
33        ]
34
35    def __str__(self):
36        return self.url