feat: Add status, split migration to provide proper default
This commit is contained in:
parent
aa4c4d3c60
commit
195a5ab26a
70
src/fellchensammlung/migrations/0010_status.py
Normal file
70
src/fellchensammlung/migrations/0010_status.py
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
# Generated by Django 5.0.6 on 2024-06-06 14:51
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("fellchensammlung", "0009_remove_image_title"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="Status",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"major_status",
|
||||||
|
models.CharField(
|
||||||
|
choices=[
|
||||||
|
("active", "active"),
|
||||||
|
("in_review", "in review"),
|
||||||
|
("closed", "closed"),
|
||||||
|
("disabled", "disabled"),
|
||||||
|
],
|
||||||
|
max_length=200,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"minor_status",
|
||||||
|
models.CharField(
|
||||||
|
choices=[
|
||||||
|
("searching", "searching"),
|
||||||
|
("interested", "interested"),
|
||||||
|
("waiting_for_review", "waiting_for_review"),
|
||||||
|
(
|
||||||
|
"successful_with_notfellchen",
|
||||||
|
"successful_with_notfellchen",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"successful_without_notfellchen",
|
||||||
|
"successful_without_notfellchen",
|
||||||
|
),
|
||||||
|
("animal_died", "animal_died"),
|
||||||
|
(
|
||||||
|
"closed_for_other_adoption_notice",
|
||||||
|
"closed_for_other_adoption_notice",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"not_open_for_adoption_anymore",
|
||||||
|
"not_open_for_adoption_anymore",
|
||||||
|
),
|
||||||
|
("other", "other"),
|
||||||
|
("against_the_rules", "against_the_rules"),
|
||||||
|
("missing_information", "missing_information"),
|
||||||
|
],
|
||||||
|
max_length=200,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
@ -0,0 +1,27 @@
|
|||||||
|
# Generated by Django 5.0.6 on 2024-06-06 14:51
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
from fellchensammlung.models import Status
|
||||||
|
|
||||||
|
default_status = Status.objects.create(major_status=Status.ACTIVE, minor_status="searching")
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
("fellchensammlung", "0010_status"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="adoptionnotice",
|
||||||
|
name="status",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
default=default_status.pk,
|
||||||
|
on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
to="fellchensammlung.status",
|
||||||
|
),
|
||||||
|
preserve_default=False,
|
||||||
|
),
|
||||||
|
]
|
@ -35,6 +35,64 @@ class Language(models.Model):
|
|||||||
verbose_name_plural = _('Sprachen')
|
verbose_name_plural = _('Sprachen')
|
||||||
|
|
||||||
|
|
||||||
|
class Status(models.Model):
|
||||||
|
"""
|
||||||
|
The major status indicates a general state of an adoption notice
|
||||||
|
whereas the minor status is used for reporting
|
||||||
|
"""
|
||||||
|
|
||||||
|
ACTIVE = "active"
|
||||||
|
IN_REVIEW = "in_review"
|
||||||
|
CLOSED = "closed"
|
||||||
|
DISABLED = "disabled"
|
||||||
|
MAJOR_STATUS_CHOICES = {
|
||||||
|
ACTIVE: "active",
|
||||||
|
IN_REVIEW: "in review",
|
||||||
|
CLOSED: "closed",
|
||||||
|
DISABLED: "disabled",
|
||||||
|
}
|
||||||
|
|
||||||
|
MINOR_STATUS_CHOICES = {
|
||||||
|
ACTIVE: {
|
||||||
|
"searching": "searching",
|
||||||
|
"interested": "interested",
|
||||||
|
},
|
||||||
|
IN_REVIEW: {
|
||||||
|
"waiting_for_review": "waiting_for_review",
|
||||||
|
},
|
||||||
|
CLOSED: {
|
||||||
|
"successful_with_notfellchen": "successful_with_notfellchen",
|
||||||
|
"successful_without_notfellchen": "successful_without_notfellchen",
|
||||||
|
"animal_died": "animal_died",
|
||||||
|
"closed_for_other_adoption_notice": "closed_for_other_adoption_notice",
|
||||||
|
"not_open_for_adoption_anymore": "not_open_for_adoption_anymore",
|
||||||
|
"other": "other"
|
||||||
|
},
|
||||||
|
DISABLED: {
|
||||||
|
"against_the_rules": "against_the_rules",
|
||||||
|
"missing_information": "missing_information",
|
||||||
|
"other": "other"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
major_status = models.CharField(choices=MAJOR_STATUS_CHOICES, max_length=200)
|
||||||
|
minor_choices = {}
|
||||||
|
for key in MINOR_STATUS_CHOICES:
|
||||||
|
minor_choices.update(MINOR_STATUS_CHOICES[key])
|
||||||
|
minor_status = models.CharField(choices=minor_choices, max_length=200)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.major_status}: {self.minor_status}"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_active(self):
|
||||||
|
return self.major_status == self.ACTIVE
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_minor_choices(major_status):
|
||||||
|
return Status.MINOR_STATUS_CHOICES[major_status]
|
||||||
|
|
||||||
|
|
||||||
class Image(models.Model):
|
class Image(models.Model):
|
||||||
image = models.ImageField(upload_to='images')
|
image = models.ImageField(upload_to='images')
|
||||||
alt_text = models.TextField(max_length=2000)
|
alt_text = models.TextField(max_length=2000)
|
||||||
@ -62,7 +120,6 @@ class Species(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class Location(models.Model):
|
class Location(models.Model):
|
||||||
|
|
||||||
place_id = models.IntegerField()
|
place_id = models.IntegerField()
|
||||||
latitude = models.FloatField()
|
latitude = models.FloatField()
|
||||||
longitude = models.FloatField()
|
longitude = models.FloatField()
|
||||||
@ -125,6 +182,7 @@ class AdoptionNotice(models.Model):
|
|||||||
photos = models.ManyToManyField(Image, blank=True)
|
photos = models.ManyToManyField(Image, blank=True)
|
||||||
location_string = models.CharField(max_length=200, verbose_name=_("Ortsangabe"))
|
location_string = models.CharField(max_length=200, verbose_name=_("Ortsangabe"))
|
||||||
location = models.ForeignKey(Location, blank=True, null=True, on_delete=models.SET_NULL, )
|
location = models.ForeignKey(Location, blank=True, null=True, on_delete=models.SET_NULL, )
|
||||||
|
status = models.ForeignKey(Status, on_delete=models.PROTECT)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def animals(self):
|
def animals(self):
|
||||||
@ -199,8 +257,6 @@ class AdoptionNotice(models.Model):
|
|||||||
return f"<a href='{self.further_information}'>{domain}</a>"
|
return f"<a href='{self.further_information}'>{domain}</a>"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Animal(models.Model):
|
class Animal(models.Model):
|
||||||
MALE_NEUTERED = "M_N"
|
MALE_NEUTERED = "M_N"
|
||||||
MALE = "M"
|
MALE = "M"
|
||||||
@ -461,7 +517,6 @@ class Announcement(Text):
|
|||||||
return active_announcements_in_language + untranslated_announcements
|
return active_announcements_in_language + untranslated_announcements
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Comment(models.Model):
|
class Comment(models.Model):
|
||||||
"""
|
"""
|
||||||
Class to store comments in markdown content
|
Class to store comments in markdown content
|
||||||
|
Loading…
Reference in New Issue
Block a user