222 lines
7 KiB
Python
222 lines
7 KiB
Python
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})
|