Skip to content
Snippets Groups Projects
models.py 2.58 KiB
Newer Older
from django.db import models
from django.contrib.auth.models import User
from django_countries.fields import CountryField
Agustín Céspedes's avatar
Agustín Céspedes committed

#This model creates the market where companies can work
class Market(models.Model):
    name = models.CharField(max_length=200)

    def __str__(self):
        return self.name


class Source(models.Model):
    name = models.CharField(max_length=200)
    url = models.CharField(max_length=200)


#This is the model for Companies that are going to be registered even thought they are not clients in the system
Agustín Céspedes's avatar
Agustín Céspedes committed
class Company(models.Model):
    name = models.CharField(max_length=200)
    market = models.ForeignKey(Market, on_delete=models.SET_NULL, blank=True, null=True)
    country = CountryField(blank_label='(selecciona país)', null=True)  # ISO 3166 for Country Codes
    users = models.ManyToManyField(User, blank=True)
Agustín Céspedes's avatar
Agustín Céspedes committed
    competitors = models.ManyToManyField('self', through='Competitor')
Agustín Céspedes's avatar
Agustín Céspedes committed
    sources = models.ManyToManyField(Source, through='CompanySource', related_name='companies')

    def __str__(self):
        return self.name


class Agency(models.Model):
    company = models.OneToOneField(Company, on_delete=models.CASCADE, related_name='agency')
    managed_companies = models.ManyToManyField(Company, related_name='managed_by_agencies')

    def __str__(self):
Agustín Céspedes's avatar
Agustín Céspedes committed
        return self.company.name


#This is the model for the competitors it is a relation of a Company to another.
Agustín Céspedes's avatar
Agustín Céspedes committed
class Competitor(models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='company_competitors')
    competitor = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='competitor_competitors')
Agustín Céspedes's avatar
Agustín Céspedes committed
        unique_together = ('company', 'competitor')

    def __str__(self):
Agustín Céspedes's avatar
Agustín Céspedes committed
        return f"{self.company.name} - Competitor: {self.competitor.name}"


class CompanySource(models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    source = models.ForeignKey(Source, on_delete=models.CASCADE)
    code = models.CharField(max_length=50)  # The internal id of the company for this source

    def __str__(self):
        return f"{self.company.name} - Source: {self.source.name}, Code: {self.code}"


class Advertisement(models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    source = models.ForeignKey(Source, on_delete=models.CASCADE)
    market = models.ForeignKey(Market, on_delete=models.CASCADE)
    text_content = models.TextField()
    url = models.URLField()
    reach = models.IntegerField(blank=True, null=True)

    def __str__(self):
Agustín Céspedes's avatar
Agustín Céspedes committed
        return f"Advertisement: {self.text_content[:50]}..."