mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-27 12:07:04 -05:00
feat: Introduce lists and reviews apps, refactor user list functionality from accounts, and add user profile fields.
This commit is contained in:
@@ -0,0 +1,760 @@
|
||||
# Generated by Django 5.1.6 on 2025-12-26 14:10
|
||||
|
||||
import apps.core.choices.fields
|
||||
import apps.core.state_machine.fields
|
||||
import django.contrib.postgres.fields
|
||||
import django.core.validators
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("parks", "0024_add_timezone_default"),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name="company",
|
||||
options={
|
||||
"ordering": ["name"],
|
||||
"verbose_name": "Company",
|
||||
"verbose_name_plural": "Companies",
|
||||
},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name="park",
|
||||
options={
|
||||
"ordering": ["name"],
|
||||
"verbose_name": "Park",
|
||||
"verbose_name_plural": "Parks",
|
||||
},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name="parkarea",
|
||||
options={
|
||||
"ordering": ["park", "name"],
|
||||
"verbose_name": "Park Area",
|
||||
"verbose_name_plural": "Park Areas",
|
||||
},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name="parkphoto",
|
||||
options={
|
||||
"ordering": ["-is_primary", "-created_at"],
|
||||
"verbose_name": "Park Photo",
|
||||
"verbose_name_plural": "Park Photos",
|
||||
},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name="parkreview",
|
||||
options={
|
||||
"ordering": ["-created_at"],
|
||||
"verbose_name": "Park Review",
|
||||
"verbose_name_plural": "Park Reviews",
|
||||
},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="company",
|
||||
name="description",
|
||||
field=models.TextField(
|
||||
blank=True, help_text="Detailed company description"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="company",
|
||||
name="founded_year",
|
||||
field=models.PositiveIntegerField(
|
||||
blank=True, help_text="Year the company was founded", null=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="company",
|
||||
name="name",
|
||||
field=models.CharField(help_text="Company name", max_length=255),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="company",
|
||||
name="parks_count",
|
||||
field=models.IntegerField(
|
||||
default=0, help_text="Number of parks operated (auto-calculated)"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="company",
|
||||
name="rides_count",
|
||||
field=models.IntegerField(
|
||||
default=0, help_text="Number of rides manufactured (auto-calculated)"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="company",
|
||||
name="roles",
|
||||
field=django.contrib.postgres.fields.ArrayField(
|
||||
base_field=apps.core.choices.fields.RichChoiceField(
|
||||
allow_deprecated=False,
|
||||
choice_group="company_roles",
|
||||
choices=[
|
||||
("OPERATOR", "Park Operator"),
|
||||
("PROPERTY_OWNER", "Property Owner"),
|
||||
],
|
||||
domain="parks",
|
||||
max_length=20,
|
||||
),
|
||||
blank=True,
|
||||
default=list,
|
||||
help_text="Company roles (operator, manufacturer, etc.)",
|
||||
size=None,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="company",
|
||||
name="slug",
|
||||
field=models.SlugField(
|
||||
help_text="URL-friendly identifier", max_length=255, unique=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="company",
|
||||
name="website",
|
||||
field=models.URLField(blank=True, help_text="Company website URL"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="companyevent",
|
||||
name="description",
|
||||
field=models.TextField(
|
||||
blank=True, help_text="Detailed company description"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="companyevent",
|
||||
name="founded_year",
|
||||
field=models.PositiveIntegerField(
|
||||
blank=True, help_text="Year the company was founded", null=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="companyevent",
|
||||
name="name",
|
||||
field=models.CharField(help_text="Company name", max_length=255),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="companyevent",
|
||||
name="parks_count",
|
||||
field=models.IntegerField(
|
||||
default=0, help_text="Number of parks operated (auto-calculated)"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="companyevent",
|
||||
name="rides_count",
|
||||
field=models.IntegerField(
|
||||
default=0, help_text="Number of rides manufactured (auto-calculated)"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="companyevent",
|
||||
name="roles",
|
||||
field=django.contrib.postgres.fields.ArrayField(
|
||||
base_field=apps.core.choices.fields.RichChoiceField(
|
||||
allow_deprecated=False,
|
||||
choice_group="company_roles",
|
||||
choices=[
|
||||
("OPERATOR", "Park Operator"),
|
||||
("PROPERTY_OWNER", "Property Owner"),
|
||||
],
|
||||
domain="parks",
|
||||
max_length=20,
|
||||
),
|
||||
blank=True,
|
||||
default=list,
|
||||
help_text="Company roles (operator, manufacturer, etc.)",
|
||||
size=None,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="companyevent",
|
||||
name="slug",
|
||||
field=models.SlugField(
|
||||
db_index=False, help_text="URL-friendly identifier", max_length=255
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="companyevent",
|
||||
name="website",
|
||||
field=models.URLField(blank=True, help_text="Company website URL"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="companyheadquarters",
|
||||
name="company",
|
||||
field=models.OneToOneField(
|
||||
help_text="Company this headquarters belongs to",
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="headquarters",
|
||||
to="parks.company",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="companyheadquartersevent",
|
||||
name="company",
|
||||
field=models.ForeignKey(
|
||||
db_constraint=False,
|
||||
help_text="Company this headquarters belongs to",
|
||||
on_delete=django.db.models.deletion.DO_NOTHING,
|
||||
related_name="+",
|
||||
related_query_name="+",
|
||||
to="parks.company",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="park",
|
||||
name="average_rating",
|
||||
field=models.DecimalField(
|
||||
blank=True,
|
||||
decimal_places=2,
|
||||
help_text="Average user rating (1–10)",
|
||||
max_digits=3,
|
||||
null=True,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="park",
|
||||
name="closing_date",
|
||||
field=models.DateField(blank=True, help_text="Closing date", null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="park",
|
||||
name="coaster_count",
|
||||
field=models.IntegerField(
|
||||
blank=True, help_text="Total coaster count", null=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="park",
|
||||
name="description",
|
||||
field=models.TextField(blank=True, help_text="Park description"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="park",
|
||||
name="name",
|
||||
field=models.CharField(help_text="Park name", max_length=255),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="park",
|
||||
name="opening_date",
|
||||
field=models.DateField(blank=True, help_text="Opening date", null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="park",
|
||||
name="operating_season",
|
||||
field=models.CharField(
|
||||
blank=True, help_text="Operating season", max_length=255
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="park",
|
||||
name="ride_count",
|
||||
field=models.IntegerField(
|
||||
blank=True, help_text="Total ride count", null=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="park",
|
||||
name="size_acres",
|
||||
field=models.DecimalField(
|
||||
blank=True,
|
||||
decimal_places=2,
|
||||
help_text="Park size in acres",
|
||||
max_digits=10,
|
||||
null=True,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="park",
|
||||
name="slug",
|
||||
field=models.SlugField(
|
||||
help_text="URL-friendly identifier", max_length=255, unique=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="park",
|
||||
name="status",
|
||||
field=apps.core.state_machine.fields.RichFSMField(
|
||||
allow_deprecated=False,
|
||||
choice_group="statuses",
|
||||
choices=[],
|
||||
default="OPERATING",
|
||||
domain="parks",
|
||||
max_length=20,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="park",
|
||||
name="website",
|
||||
field=models.URLField(blank=True, help_text="Official website URL"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkarea",
|
||||
name="closing_date",
|
||||
field=models.DateField(
|
||||
blank=True, help_text="Date this area closed (if applicable)", null=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkarea",
|
||||
name="description",
|
||||
field=models.TextField(
|
||||
blank=True, help_text="Detailed description of the area"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkarea",
|
||||
name="name",
|
||||
field=models.CharField(help_text="Name of the park area", max_length=255),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkarea",
|
||||
name="opening_date",
|
||||
field=models.DateField(
|
||||
blank=True, help_text="Date this area opened", null=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkarea",
|
||||
name="park",
|
||||
field=models.ForeignKey(
|
||||
help_text="Park this area belongs to",
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="areas",
|
||||
to="parks.park",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkarea",
|
||||
name="slug",
|
||||
field=models.SlugField(
|
||||
help_text="URL-friendly identifier (unique within park)", max_length=255
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkareaevent",
|
||||
name="closing_date",
|
||||
field=models.DateField(
|
||||
blank=True, help_text="Date this area closed (if applicable)", null=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkareaevent",
|
||||
name="description",
|
||||
field=models.TextField(
|
||||
blank=True, help_text="Detailed description of the area"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkareaevent",
|
||||
name="name",
|
||||
field=models.CharField(help_text="Name of the park area", max_length=255),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkareaevent",
|
||||
name="opening_date",
|
||||
field=models.DateField(
|
||||
blank=True, help_text="Date this area opened", null=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkareaevent",
|
||||
name="park",
|
||||
field=models.ForeignKey(
|
||||
db_constraint=False,
|
||||
help_text="Park this area belongs to",
|
||||
on_delete=django.db.models.deletion.DO_NOTHING,
|
||||
related_name="+",
|
||||
related_query_name="+",
|
||||
to="parks.park",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkareaevent",
|
||||
name="slug",
|
||||
field=models.SlugField(
|
||||
db_index=False,
|
||||
help_text="URL-friendly identifier (unique within park)",
|
||||
max_length=255,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkevent",
|
||||
name="average_rating",
|
||||
field=models.DecimalField(
|
||||
blank=True,
|
||||
decimal_places=2,
|
||||
help_text="Average user rating (1–10)",
|
||||
max_digits=3,
|
||||
null=True,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkevent",
|
||||
name="closing_date",
|
||||
field=models.DateField(blank=True, help_text="Closing date", null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkevent",
|
||||
name="coaster_count",
|
||||
field=models.IntegerField(
|
||||
blank=True, help_text="Total coaster count", null=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkevent",
|
||||
name="description",
|
||||
field=models.TextField(blank=True, help_text="Park description"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkevent",
|
||||
name="name",
|
||||
field=models.CharField(help_text="Park name", max_length=255),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkevent",
|
||||
name="opening_date",
|
||||
field=models.DateField(blank=True, help_text="Opening date", null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkevent",
|
||||
name="operating_season",
|
||||
field=models.CharField(
|
||||
blank=True, help_text="Operating season", max_length=255
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkevent",
|
||||
name="ride_count",
|
||||
field=models.IntegerField(
|
||||
blank=True, help_text="Total ride count", null=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkevent",
|
||||
name="size_acres",
|
||||
field=models.DecimalField(
|
||||
blank=True,
|
||||
decimal_places=2,
|
||||
help_text="Park size in acres",
|
||||
max_digits=10,
|
||||
null=True,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkevent",
|
||||
name="slug",
|
||||
field=models.SlugField(
|
||||
db_index=False, help_text="URL-friendly identifier", max_length=255
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkevent",
|
||||
name="status",
|
||||
field=apps.core.state_machine.fields.RichFSMField(
|
||||
allow_deprecated=False,
|
||||
choice_group="statuses",
|
||||
choices=[],
|
||||
default="OPERATING",
|
||||
domain="parks",
|
||||
max_length=20,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkevent",
|
||||
name="timezone",
|
||||
field=models.CharField(
|
||||
blank=True,
|
||||
default="UTC",
|
||||
help_text="Timezone identifier for park operations (e.g., 'America/New_York')",
|
||||
max_length=50,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkevent",
|
||||
name="website",
|
||||
field=models.URLField(blank=True, help_text="Official website URL"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkphoto",
|
||||
name="alt_text",
|
||||
field=models.CharField(
|
||||
blank=True,
|
||||
help_text="Alternative text for accessibility",
|
||||
max_length=255,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkphoto",
|
||||
name="caption",
|
||||
field=models.CharField(
|
||||
blank=True, help_text="Photo caption or description", max_length=255
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkphoto",
|
||||
name="is_approved",
|
||||
field=models.BooleanField(
|
||||
default=False,
|
||||
help_text="Whether this photo has been approved by moderators",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkphoto",
|
||||
name="is_primary",
|
||||
field=models.BooleanField(
|
||||
default=False,
|
||||
help_text="Whether this is the primary photo for the park",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkphoto",
|
||||
name="park",
|
||||
field=models.ForeignKey(
|
||||
help_text="Park this photo belongs to",
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="photos",
|
||||
to="parks.park",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkphoto",
|
||||
name="uploaded_by",
|
||||
field=models.ForeignKey(
|
||||
help_text="User who uploaded this photo",
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="uploaded_park_photos",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkphotoevent",
|
||||
name="alt_text",
|
||||
field=models.CharField(
|
||||
blank=True,
|
||||
help_text="Alternative text for accessibility",
|
||||
max_length=255,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkphotoevent",
|
||||
name="caption",
|
||||
field=models.CharField(
|
||||
blank=True, help_text="Photo caption or description", max_length=255
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkphotoevent",
|
||||
name="is_approved",
|
||||
field=models.BooleanField(
|
||||
default=False,
|
||||
help_text="Whether this photo has been approved by moderators",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkphotoevent",
|
||||
name="is_primary",
|
||||
field=models.BooleanField(
|
||||
default=False,
|
||||
help_text="Whether this is the primary photo for the park",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkphotoevent",
|
||||
name="park",
|
||||
field=models.ForeignKey(
|
||||
db_constraint=False,
|
||||
help_text="Park this photo belongs to",
|
||||
on_delete=django.db.models.deletion.DO_NOTHING,
|
||||
related_name="+",
|
||||
related_query_name="+",
|
||||
to="parks.park",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkphotoevent",
|
||||
name="uploaded_by",
|
||||
field=models.ForeignKey(
|
||||
db_constraint=False,
|
||||
help_text="User who uploaded this photo",
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.DO_NOTHING,
|
||||
related_name="+",
|
||||
related_query_name="+",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreview",
|
||||
name="content",
|
||||
field=models.TextField(help_text="Review content"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreview",
|
||||
name="is_published",
|
||||
field=models.BooleanField(
|
||||
default=True, help_text="Whether this review is publicly visible"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreview",
|
||||
name="moderated_at",
|
||||
field=models.DateTimeField(
|
||||
blank=True, help_text="When this review was moderated", null=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreview",
|
||||
name="moderated_by",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
help_text="Moderator who reviewed this",
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="moderated_park_reviews",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreview",
|
||||
name="moderation_notes",
|
||||
field=models.TextField(
|
||||
blank=True, help_text="Internal notes from moderators"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreview",
|
||||
name="park",
|
||||
field=models.ForeignKey(
|
||||
help_text="Park being reviewed",
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="reviews",
|
||||
to="parks.park",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreview",
|
||||
name="rating",
|
||||
field=models.PositiveSmallIntegerField(
|
||||
help_text="Rating from 1-10",
|
||||
validators=[
|
||||
django.core.validators.MinValueValidator(1),
|
||||
django.core.validators.MaxValueValidator(10),
|
||||
],
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreview",
|
||||
name="title",
|
||||
field=models.CharField(help_text="Review title", max_length=200),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreview",
|
||||
name="user",
|
||||
field=models.ForeignKey(
|
||||
help_text="User who wrote the review",
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="park_reviews",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreview",
|
||||
name="visit_date",
|
||||
field=models.DateField(help_text="Date the user visited the park"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreviewevent",
|
||||
name="content",
|
||||
field=models.TextField(help_text="Review content"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreviewevent",
|
||||
name="is_published",
|
||||
field=models.BooleanField(
|
||||
default=True, help_text="Whether this review is publicly visible"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreviewevent",
|
||||
name="moderated_at",
|
||||
field=models.DateTimeField(
|
||||
blank=True, help_text="When this review was moderated", null=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreviewevent",
|
||||
name="moderated_by",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
db_constraint=False,
|
||||
help_text="Moderator who reviewed this",
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.DO_NOTHING,
|
||||
related_name="+",
|
||||
related_query_name="+",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreviewevent",
|
||||
name="moderation_notes",
|
||||
field=models.TextField(
|
||||
blank=True, help_text="Internal notes from moderators"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreviewevent",
|
||||
name="park",
|
||||
field=models.ForeignKey(
|
||||
db_constraint=False,
|
||||
help_text="Park being reviewed",
|
||||
on_delete=django.db.models.deletion.DO_NOTHING,
|
||||
related_name="+",
|
||||
related_query_name="+",
|
||||
to="parks.park",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreviewevent",
|
||||
name="rating",
|
||||
field=models.PositiveSmallIntegerField(
|
||||
help_text="Rating from 1-10",
|
||||
validators=[
|
||||
django.core.validators.MinValueValidator(1),
|
||||
django.core.validators.MaxValueValidator(10),
|
||||
],
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreviewevent",
|
||||
name="title",
|
||||
field=models.CharField(help_text="Review title", max_length=200),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreviewevent",
|
||||
name="user",
|
||||
field=models.ForeignKey(
|
||||
db_constraint=False,
|
||||
help_text="User who wrote the review",
|
||||
on_delete=django.db.models.deletion.DO_NOTHING,
|
||||
related_name="+",
|
||||
related_query_name="+",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="parkreviewevent",
|
||||
name="visit_date",
|
||||
field=models.DateField(help_text="Date the user visited the park"),
|
||||
),
|
||||
]
|
||||
@@ -274,6 +274,18 @@ class FindParksAlongRouteView(RoadTripViewMixin, View):
|
||||
start_park, end_park, max_detour_km
|
||||
)
|
||||
|
||||
# Return JSON if requested
|
||||
if request.headers.get("Accept") == "application/json" or request.content_type == "application/json":
|
||||
return JsonResponse({
|
||||
"status": "success",
|
||||
"data": {
|
||||
"parks": [self._park_to_dict(p) for p in parks_along_route],
|
||||
"start_park": self._park_to_dict(start_park),
|
||||
"end_park": self._park_to_dict(end_park),
|
||||
"count": len(parks_along_route)
|
||||
}
|
||||
})
|
||||
|
||||
return render(
|
||||
request,
|
||||
PARKS_ALONG_ROUTE_HTML,
|
||||
|
||||
Reference in New Issue
Block a user