bornhack-website/src/sponsors/models.py

65 lines
1.9 KiB
Python

from django.db import models
from utils.models import CampRelatedModel
def get_sponsor_upload_path(instance, filename):
return "public/sponsors/{camp_slug}/{filename}".format(
camp_slug=instance.tier.camp.slug,
filename="{}_logo.{}".format(instance.name.lower(), filename.split(".")[-1]),
)
class Sponsor(CampRelatedModel):
name = models.CharField(max_length=150, help_text="Name of the sponsor")
tier = models.ForeignKey("sponsors.SponsorTier", on_delete=models.PROTECT)
description = models.TextField(help_text="A short description of the sponsorship")
logo_filename = models.CharField(max_length=255, help_text="Filename of the logo")
url = models.URLField(null=True, blank=True, help_text="An URL to the sponsor.")
tickets_generated = models.BooleanField(default=False)
def __str__(self):
return "{} ({})".format(self.name, self.tier.camp)
@property
def camp(self):
return self.tier.camp
camp_filter = "tier__camp"
class SponsorTier(CampRelatedModel):
name = models.CharField(
max_length=25, help_text="Name of the tier (gold, silver, etc.)"
)
description = models.TextField(help_text="A description of what the tier includes.")
camp = models.ForeignKey(
"camps.Camp",
null=True,
on_delete=models.PROTECT,
related_name="sponsor_tiers",
help_text="The camp this sponsor tier belongs to",
)
weight = models.IntegerField(
default=0,
help_text="""This decides where on the list the tier will be shown. I.e.
gold should have a lower value than silver.""",
)
tickets = models.IntegerField(
null=True,
blank=True,
help_text="If set this is the number of tickets generated for a sponsor in this tier.",
)
def __str__(self):
return "{} ({})".format(self.name, self.camp)