from django.db import models from django.contrib.postgres.fields import ArrayField # Create your models here. class Urls(models.Model): class STATUS_ENUM(models.TextChoices): RAW = "raw" ERROR = "error" VALID = "valid" UNKNOWN = "unknown" INVALID = "invalid" DUPLICATE = "duplicate" url = models.TextField(unique=True) ts_fetch = models.DateTimeField() status = models.TextField(choices=STATUS_ENUM, default=STATUS_ENUM.RAW) # This field type is a guess. def __str__(self): return self.url class Meta: managed = False db_table = 'urls' # db_table = '{}_urls'.format(project_name) ordering = ["-ts_fetch"] class Source(models.Model): id = models.SmallAutoField(primary_key=True) source = models.TextField(unique=True) def __str__(self): return self.source class Meta: managed = False db_table = 'source' class UrlsSource(models.Model): id_url = models.OneToOneField(Urls, models.DO_NOTHING, db_column='id_url', primary_key=True) # The composite primary key (id_url, id_source) found, that is not supported. The first column is selected. id_source = models.ForeignKey(Source, models.DO_NOTHING, db_column='id_source') def __str__(self): return "Source: {}, URL: {}".format(self.id_source, self.id_url) class Meta: managed = False db_table = 'urls_source' unique_together = (('id_url', 'id_source'),) class UrlContent(models.Model): id_url = models.OneToOneField(Urls, models.DO_NOTHING, db_column='id_url', primary_key=True) date_published = models.DateTimeField(blank=True, null=True) title = models.TextField(blank=True, null=True) description = models.TextField(blank=True, null=True) content = models.TextField(blank=True, null=True) tags = ArrayField(models.TextField(blank=True, null=True)) authors = ArrayField(models.TextField(blank=True, null=True)) image_urls = ArrayField(models.TextField(blank=True, null=True)) class Meta: managed = False db_table = 'url_content'