You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
834 B
25 lines
834 B
2 years ago
|
from django.db import models
|
||
|
from django.utils.translation import gettext_lazy as _
|
||
|
from django_scopes import ScopedManager
|
||
|
from scopedsites.models import Domain
|
||
|
from xenua.django.models import RandomSlugPKMixin
|
||
|
|
||
|
|
||
|
class ShortLink(RandomSlugPKMixin, models.Model):
|
||
|
class Meta:
|
||
|
unique_together = ('domain', 'location')
|
||
|
|
||
|
domain = models.ForeignKey(Domain, related_name='links', on_delete=models.CASCADE)
|
||
|
location = models.CharField(_("short link"), max_length=100)
|
||
|
to = models.URLField(_("redirect to"), max_length=2500)
|
||
|
click_count = models.IntegerField(default=0)
|
||
|
|
||
|
objects = ScopedManager(domain='domain')
|
||
|
|
||
|
def click(self): # todo: replace with cache + regular cleanup impl
|
||
|
self.click_count += 1
|
||
|
self.save()
|
||
|
|
||
|
def link(self):
|
||
|
return f"{self.domain.fqdn}/{self.location}"
|