Initial project
This commit is contained in:
213
surveys/migrations/0001_initial.py
Normal file
213
surveys/migrations/0001_initial.py
Normal file
@@ -0,0 +1,213 @@
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
initial = True
|
||||
|
||||
dependencies = []
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="Survey",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("title", models.CharField(max_length=180)),
|
||||
(
|
||||
"slug",
|
||||
models.SlugField(
|
||||
help_text="Stable public identifier used in API URLs.",
|
||||
max_length=140,
|
||||
unique=True,
|
||||
),
|
||||
),
|
||||
("description", models.TextField(blank=True)),
|
||||
(
|
||||
"thank_you_message",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
default="Thanks for your response.",
|
||||
max_length=240,
|
||||
),
|
||||
),
|
||||
(
|
||||
"status",
|
||||
models.CharField(
|
||||
choices=[
|
||||
("draft", "Draft"),
|
||||
("published", "Published"),
|
||||
("closed", "Closed"),
|
||||
],
|
||||
default="draft",
|
||||
max_length=20,
|
||||
),
|
||||
),
|
||||
("starts_at", models.DateTimeField(blank=True, null=True)),
|
||||
("ends_at", models.DateTimeField(blank=True, null=True)),
|
||||
("allow_multiple_responses", models.BooleanField(default=True)),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
],
|
||||
options={
|
||||
"ordering": ["-updated_at", "title"],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="SurveyQuestion",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("prompt", models.CharField(max_length=280)),
|
||||
("slug", models.SlugField(blank=True, max_length=140)),
|
||||
("help_text", models.CharField(blank=True, max_length=240)),
|
||||
(
|
||||
"type",
|
||||
models.CharField(
|
||||
choices=[
|
||||
("short_text", "Short text"),
|
||||
("long_text", "Long text"),
|
||||
("single_choice", "Single choice"),
|
||||
("multiple_choice", "Multiple choice"),
|
||||
("rating", "Rating"),
|
||||
("yes_no", "Yes/No"),
|
||||
],
|
||||
default="short_text",
|
||||
max_length=30,
|
||||
),
|
||||
),
|
||||
("is_required", models.BooleanField(default=True)),
|
||||
("position", models.PositiveIntegerField(default=0)),
|
||||
("min_value", models.IntegerField(blank=True, default=1, null=True)),
|
||||
("max_value", models.IntegerField(blank=True, default=5, null=True)),
|
||||
(
|
||||
"survey",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="questions",
|
||||
to="surveys.survey",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"ordering": ["position", "id"],
|
||||
"unique_together": {("survey", "slug")},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="SurveyChoice",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("label", models.CharField(max_length=180)),
|
||||
("value", models.SlugField(blank=True, max_length=140)),
|
||||
("position", models.PositiveIntegerField(default=0)),
|
||||
(
|
||||
"question",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="choices",
|
||||
to="surveys.surveyquestion",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"ordering": ["position", "id"],
|
||||
"unique_together": {("question", "value")},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="SurveyResponse",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("respondent_email", models.EmailField(blank=True, max_length=254)),
|
||||
("metadata", models.JSONField(blank=True, default=dict)),
|
||||
("ip_address", models.GenericIPAddressField(blank=True, null=True)),
|
||||
("user_agent", models.CharField(blank=True, max_length=255)),
|
||||
("submitted_at", models.DateTimeField(auto_now_add=True)),
|
||||
(
|
||||
"survey",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="responses",
|
||||
to="surveys.survey",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"ordering": ["-submitted_at"],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="SurveyAnswer",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("value", models.JSONField(blank=True, default=dict)),
|
||||
(
|
||||
"question",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.PROTECT,
|
||||
related_name="answers",
|
||||
to="surveys.surveyquestion",
|
||||
),
|
||||
),
|
||||
(
|
||||
"response",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="answers",
|
||||
to="surveys.surveyresponse",
|
||||
),
|
||||
),
|
||||
(
|
||||
"selected_choices",
|
||||
models.ManyToManyField(
|
||||
blank=True,
|
||||
related_name="answers",
|
||||
to="surveys.surveychoice",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"ordering": ["question__position", "id"],
|
||||
"unique_together": {("response", "question")},
|
||||
},
|
||||
),
|
||||
]
|
||||
1
surveys/migrations/__init__.py
Normal file
1
surveys/migrations/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
Reference in New Issue
Block a user