from django.core.serializers.json import DjangoJSONEncoder from django.db import models from django.utils import timezone class TrackEvent(models.Model): SOURCE_SERVER = 0 SOURCE_BROWSER = 1 SOURCE_CHOICES = ( (SOURCE_SERVER, 'server'), (SOURCE_BROWSER, 'browser') ) openid = models.CharField(max_length=64, blank=True, null=True) track_id = models.CharField(max_length=128, blank=True, null=True) event_type = models.CharField(max_length=255, blank=False, null=False) event_body = models.JSONField(default=dict, encoder=DjangoJSONEncoder) event_time = models.DateTimeField(default=timezone.now, blank=True) user_agent = models.CharField(max_length=255, blank=True, null=True) ip = models.CharField(max_length=255, blank=True, null=True) pure_url = models.CharField(max_length=255, blank=True, null=True) utm_source = models.CharField(max_length=64, blank=True, null=True) utm_medium = models.CharField(max_length=64, blank=True, null=True) utm_campaign = models.CharField(max_length=64, blank=True, null=True) asktug_topic_id = models.IntegerField(blank=True, null=True) asktug_post_id = models.IntegerField(blank=True, null=True) description = models.TextField(blank=True, null=True) source = models.SmallIntegerField( blank=True, choices=SOURCE_CHOICES, default=SOURCE_SERVER) class Meta: db_table = 'track_events' def save(self, *args, **kwargs): if self.openid: self.openid = str(self.openid)[:64] if self.user_agent: self.user_agent = str(self.user_agent)[:255] if not self.event_time: self.event_time = timezone.now() super(TrackEvent, self).save(*args, **kwargs)