Gallery-Archivist/archivist/sites/furaffinity/models.py

223 lines
7 KiB
Python
Raw Normal View History

2023-10-21 15:00:32 +00:00
from django.utils.translation import gettext_lazy as _
from django.utils.text import slugify
from django.urls import reverse
from django.db import models
import os
# Create your models here.
class FA_UserIconFile(models.Model):
icon_file_hash = models.CharField(unique=True, max_length=64,)
icon_file_name = models.CharField(max_length=150, blank=True)
icon_file = models.FileField(upload_to="furaffinity/user_icon/", blank=True)
date_added = models.DateTimeField(auto_now_add=True, editable=True)
class Meta:
verbose_name = _("User Icon File")
verbose_name_plural = _("User Icon Files")
def __str__(self):
return self.name
#def get_absolute_url(self):
# return reverse("FA_UserIconFile_detail", kwargs={"pk": self.pk})
class FA_User(models.Model):
artist = models.CharField(max_length=35, unique=False,)
artist_url = models.SlugField(max_length=40, unique=True,)
description = models.TextField(blank=True)
icon = models.ForeignKey(FA_UserIconFile, on_delete=models.CASCADE, blank=True, null=True)
def __unicode__(self):
return self.word
class Meta:
verbose_name = _("User")
verbose_name_plural = _("Users")
def __str__(self):
return self.artist
def get_absolute_url(self):
return f"/fa/user/{self.artist_url}"
#return reverse("fa_user", kwargs={"pk": self.pk})
class FA_Tags(models.Model):
tag = models.CharField(verbose_name="Tag name", max_length=250, unique=True)
tag_slug = models.SlugField(verbose_name="Tag slug/url", max_length=260, unique=True)
class Meta:
verbose_name = _("Tag")
verbose_name_plural = _("Tags")
def save(self, *args, **kwargs):
# add slug if not already exists on save.
if not self.tag_slug:
self.tag_slug = slugify(self.tag)
super().save(*args, **kwargs)
def __str__(self):
return self.tag
def get_absolute_url(self):
return f"/fa/tag/{self.tag_slug}"
# def get_absolute_url(self):
# return f"/fa/tag/{self.tag_url}"
# return reverse("FA_Tag_detail", kwargs={"pk": self.pk})
class FA_Species(models.Model):
species = models.CharField(unique=True, max_length=50)
class Meta:
verbose_name = _("Species")
verbose_name_plural = _("Species")
def __str__(self):
return self.species
# def get_absolute_url(self):
# return reverse("FA_Species_detail", kwargs={"pk": self.pk})
class FA_Gender(models.Model):
gender = models.CharField(unique=True, max_length=30)
class Meta:
verbose_name = _("Gender")
verbose_name_plural = _("Genders")
def __str__(self):
return self.gender
# def get_absolute_url(self):
# return reverse("FA_Gender_detail", kwargs={"pk": self.pk})
class FA_Mature(models.Model):
mature = models.CharField(max_length=30, unique=True) #verbose_name="Mature Rating",
class Meta:
verbose_name = _("Mature Rating")
verbose_name_plural = _("Mature Ratings")
def __str__(self):
return self.mature
#def get_absolute_url(self):
# return reverse("FA_Mature_detail", kwargs={"pk": self.pk})
class FA_Submission_File(models.Model):
file_hash = models.CharField(unique=True, max_length=64,)
file_name = models.CharField(max_length=150, blank=True)
file = models.FileField(upload_to="furaffinity/submissions/", blank=True)
date_added = models.DateTimeField(auto_now_add=True, editable=True)
class Meta:
verbose_name = _("Submission File")
verbose_name_plural = _("Submission Files")
def __str__(self):
return self.file_hash
#def delete(self, *args, **kwargs):
# # Delete the file from the disk when the model instance is deleted
# print('Deleting image:', self.file)
# if self.file:
# if os.path.isfile(self.file.path):
# os.remove(self.file.path)
#
# super().delete(*args, **kwargs)
#def get_absolute_url(self):
# return reverse("Submission_Image_detail", kwargs={"pk": self.pk})
class FA_Submission(models.Model):
MATURE = [
("G", "General"),
("M", "Mature"),
("A", "Adult"),
]
GENDER = [
("Ma", "Male"),
("Fe", "Female"),
("He", "Herm"),
("In", "Intersex"),
("TM", "Trans (Male)"),
("TF", "Trans (Female)"),
("NB", "Non-Binary"),
("MC", "Multiple characters"),
("ON", "Other / Not Specified"),
]
# id
submission_id = models.PositiveBigIntegerField(verbose_name="ID", primary_key=True, unique=True, default=1)
# url
media_url = models.URLField(blank=True)
# title
title = models.CharField(default="", max_length=60)
# description
description = models.TextField(default="", null=True, blank=True)
# artist
artist = models.ForeignKey(FA_User, on_delete=models.CASCADE, null=True, related_name='submissions')
# date
date = models.DateTimeField(null=True)
# NOT imported
date_added = models.DateTimeField(auto_now_add=True, editable=True)
# species
species = models.ForeignKey(FA_Species, on_delete=models.CASCADE, null=True)
# tags
tags = models.ManyToManyField(FA_Tags)
# rating
mature_rating = models.ForeignKey(FA_Mature, on_delete=models.CASCADE, null=True) #CharField(max_length=2, choices=MATURE, default=MATURE[0][0])
# comments
number_of_comments = models.PositiveIntegerField(null=True)
# views
views = models.PositiveIntegerField(null=True)
# gender
gender = models.ForeignKey(FA_Gender, on_delete=models.CASCADE, null=True)
# theme
fa_theme = models.CharField(verbose_name="FA Theme", max_length=50, null=True)
# fa_category
fa_category = models.CharField(verbose_name="FA Category", max_length=50, null=True)
# subcategory
gallery_type = models.CharField(max_length=20, blank=True)
# extension
file_extension = models.CharField(max_length=10, blank=True)
# height
image_height = models.PositiveIntegerField(blank=True, null=True)
# width
image_width = models.PositiveIntegerField(blank=True, null=True)
# ImageField for the image files
file = models.ForeignKey(FA_Submission_File, on_delete=models.CASCADE, blank=True, null=True)
class Meta:
verbose_name = _("Submission")
verbose_name_plural = _("Submissions")
def __str__(self):
return self.title
#def save(self, *args, **kwargs):
# if not self.related_model:
# self.related_model, created = FA_User.objects.get_or_create(name=self.artist)
# super().save(*args, **kwargs)
# def get_absolute_url(self):
# return reverse("FA_Submission_detail", kwargs={"pk": self.pk})