backend/pitch_deck_generator/decks/models.py

84 lines
2.8 KiB
Python

from django.db import models
from pitch_deck_generator.utils.choices import count_max_length
class PitchDeck(models.Model):
# user put in info
name = models.CharField(max_length=250, blank=True, null=True)
description = models.TextField()
questions = models.JSONField(default=dict, null=True, blank=True)
# generated info
logo = models.ImageField(upload_to="logos/", null=True, blank=True)
styles = models.FileField(upload_to="styles/", null=True, blank=True)
presentation = models.FileField(upload_to="logos/", null=True, blank=True)
meta_info = models.JSONField(default=dict, null=True, blank=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
ordering = ["-updated"]
class Question(models.Model):
class QuestionType(models.TextChoices):
text = "text"
number = "number"
text_array = "text_array", "text array"
range = "range"
multiple_range = "multiple_range", "multiple range"
select = "select"
link = "link"
date = "date"
photo = "photo"
multiple_photo = "multiple_photo", "multiple photo"
photo_description = "photo_description", "photo description"
multiple_link_description = (
"multiple_link_description",
"multiple link description",
)
multiple_photo_description = (
"multiple_photo_description",
"multiple photo description",
)
multiple_links = "multiple_links", "multiple links"
order = models.IntegerField(unique=True)
text = models.CharField(max_length=300)
type = models.CharField(
choices=QuestionType.choices, max_length=count_max_length(QuestionType.choices)
)
hint = models.BooleanField(default=True)
required = models.BooleanField(default=True)
params = models.JSONField(blank=True, null=True)
inner_tag = models.CharField(blank=True, null=True, max_length=250)
def __str__(self):
return f"{self.order} - {self.text} - {self.type}"
class Meta:
ordering = ["order"]
class QuestionDeckHint(models.Model):
question = models.ForeignKey("Question", on_delete=models.CASCADE)
deck = models.ForeignKey(
"PitchDeck", related_name="hints", on_delete=models.CASCADE
)
hint = models.JSONField(null=True, blank=True)
class QuestionAnswer(models.Model):
deck = models.ForeignKey("PitchDeck", on_delete=models.CASCADE)
question = models.ForeignKey("Question", on_delete=models.CASCADE)
answer = models.JSONField(default=dict)
class QuestionAnswerPhoto(models.Model):
answer = models.ForeignKey(
"QuestionAnswer", related_name="photos", on_delete=models.CASCADE
)
file = models.ImageField(upload_to="uploads/")