Make foirequest connection optional on setup

This commit is contained in:
Stefan Wehrmeyer 2023-02-03 15:42:17 +01:00
parent 2521759625
commit 18002103b2
4 changed files with 334 additions and 279 deletions

View file

@ -242,7 +242,9 @@ class GovernmentPlanAdmin(admin.ModelAdmin):
class GovernmentPlanUpdateAdmin(admin.ModelAdmin): class GovernmentPlanUpdateAdmin(admin.ModelAdmin):
form = GovernmentPlanUpdateForm form = GovernmentPlanUpdateForm
save_on_top = True save_on_top = True
raw_id_fields = ("user", "foirequest") raw_id_fields = ["user"] + (
["foirequest"] if conf.GOVPLAN_ENABLE_FOIREQUEST else []
)
date_hierarchy = "timestamp" date_hierarchy = "timestamp"
search_fields = ("title", "content") search_fields = ("title", "content")
list_display = ( list_display = (

View file

@ -8,19 +8,31 @@ from django.db import migrations, models
import filer.fields.image import filer.fields.image
import taggit.managers import taggit.managers
from .. import conf
class Migration(migrations.Migration): class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = (
("publicbody", "0039_publicbody_alternative_emails"), [
("auth", "0012_alter_user_first_name_max_length"), ("publicbody", "0039_publicbody_alternative_emails"),
("foirequest", "0054_alter_foirequest_options"), ("auth", "0012_alter_user_first_name_max_length"),
migrations.swappable_dependency(settings.FILER_IMAGE_MODEL), ]
("organization", "0001_initial"), + (
migrations.swappable_dependency(settings.AUTH_USER_MODEL), [
] ("foirequest", "0054_alter_foirequest_options"),
]
if conf.GOVPLAN_ENABLE_FOIREQUEST
else []
)
+ [
migrations.swappable_dependency(settings.FILER_IMAGE_MODEL),
("organization", "0001_initial"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
)
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
@ -217,15 +229,23 @@ class Migration(migrations.Migration):
), ),
), ),
("public", models.BooleanField(default=False)), ("public", models.BooleanField(default=False)),
( ]
"foirequest", + (
models.ForeignKey( [
blank=True, (
null=True, "foirequest",
on_delete=django.db.models.deletion.SET_NULL, models.ForeignKey(
to="foirequest.foirequest", blank=True,
), null=True,
), on_delete=django.db.models.deletion.SET_NULL,
to="foirequest.foirequest",
),
)
]
if conf.GOVPLAN_ENABLE_FOIREQUEST
else []
)
+ [
( (
"organization", "organization",
models.ForeignKey( models.ForeignKey(

View file

@ -5,6 +5,8 @@ import django.utils.timezone
from django.conf import settings from django.conf import settings
from django.db import migrations, models from django.db import migrations, models
from .. import conf
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -13,273 +15,296 @@ class Migration(migrations.Migration):
("publicbody", "0039_publicbody_alternative_emails"), ("publicbody", "0039_publicbody_alternative_emails"),
("organization", "0001_initial"), ("organization", "0001_initial"),
("auth", "0012_alter_user_first_name_max_length"), ("auth", "0012_alter_user_first_name_max_length"),
("foirequest", "0054_alter_foirequest_options"),
("froide_govplan", "0002_auto_20220215_2113"), ("froide_govplan", "0002_auto_20220215_2113"),
] ] + (
[("foirequest", "0054_alter_foirequest_options")]
if conf.GOVPLAN_ENABLE_FOIREQUEST
else []
)
operations = [ operations = (
migrations.AddField( [
model_name="governmentplan", migrations.AddField(
name="due_date", model_name="governmentplan",
field=models.DateField(blank=True, null=True, verbose_name="due date"), name="due_date",
), field=models.DateField(blank=True, null=True, verbose_name="due date"),
migrations.AddField(
model_name="governmentplan",
name="measure",
field=models.CharField(blank=True, max_length=255, verbose_name="measure"),
),
migrations.AddField(
model_name="governmentplan",
name="quote",
field=models.TextField(blank=True, verbose_name="quote"),
),
migrations.AlterField(
model_name="government",
name="description",
field=models.TextField(blank=True, verbose_name="description"),
),
migrations.AlterField(
model_name="government",
name="end_date",
field=models.DateField(blank=True, null=True, verbose_name="end date"),
),
migrations.AlterField(
model_name="government",
name="jurisdiction",
field=models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="publicbody.jurisdiction",
verbose_name="jurisdiction",
), ),
), migrations.AddField(
migrations.AlterField( model_name="governmentplan",
model_name="government", name="measure",
name="name", field=models.CharField(
field=models.CharField(max_length=255, verbose_name="name"), blank=True, max_length=255, verbose_name="measure"
), ),
migrations.AlterField(
model_name="government",
name="planning_document",
field=models.URLField(blank=True, verbose_name="planning document"),
),
migrations.AlterField(
model_name="government",
name="public",
field=models.BooleanField(default=False, verbose_name="is public?"),
),
migrations.AlterField(
model_name="government",
name="slug",
field=models.SlugField(max_length=255, unique=True, verbose_name="slug"),
),
migrations.AlterField(
model_name="government",
name="start_date",
field=models.DateField(blank=True, null=True, verbose_name="start date"),
),
migrations.AlterField(
model_name="governmentplan",
name="description",
field=models.TextField(blank=True, verbose_name="description"),
),
migrations.AlterField(
model_name="governmentplan",
name="government",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="froide_govplan.government",
verbose_name="government",
), ),
), migrations.AddField(
migrations.AlterField( model_name="governmentplan",
model_name="governmentplan", name="quote",
name="group", field=models.TextField(blank=True, verbose_name="quote"),
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="auth.group",
verbose_name="group",
), ),
), migrations.AlterField(
migrations.AlterField( model_name="government",
model_name="governmentplan", name="description",
name="organization", field=models.TextField(blank=True, verbose_name="description"),
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="organization.organization",
verbose_name="organization",
), ),
), migrations.AlterField(
migrations.AlterField( model_name="government",
model_name="governmentplan", name="end_date",
name="public", field=models.DateField(blank=True, null=True, verbose_name="end date"),
field=models.BooleanField(default=False, verbose_name="is public?"),
),
migrations.AlterField(
model_name="governmentplan",
name="rating",
field=models.IntegerField(
blank=True,
choices=[
(1, "terrible"),
(2, "bad"),
(3, "OK"),
(4, "good"),
(5, "excellent"),
],
null=True,
verbose_name="rating",
), ),
), migrations.AlterField(
migrations.AlterField( model_name="government",
model_name="governmentplan", name="jurisdiction",
name="reference", field=models.ForeignKey(
field=models.CharField( null=True,
blank=True, max_length=255, verbose_name="reference" on_delete=django.db.models.deletion.SET_NULL,
to="publicbody.jurisdiction",
verbose_name="jurisdiction",
),
), ),
), migrations.AlterField(
migrations.AlterField( model_name="government",
model_name="governmentplan", name="name",
name="responsible_publicbody", field=models.CharField(max_length=255, verbose_name="name"),
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="publicbody.publicbody",
verbose_name="responsible public body",
), ),
), migrations.AlterField(
migrations.AlterField( model_name="government",
model_name="governmentplan", name="planning_document",
name="slug", field=models.URLField(blank=True, verbose_name="planning document"),
field=models.SlugField(max_length=255, unique=True, verbose_name="slug"),
),
migrations.AlterField(
model_name="governmentplan",
name="status",
field=models.CharField(
choices=[
("not_started", "not started"),
("started", "started"),
("partially_implemented", "partially implemented"),
("implemented", "implemented"),
("deferred", "deferred"),
],
default="not_started",
max_length=25,
verbose_name="status",
), ),
), migrations.AlterField(
migrations.AlterField( model_name="government",
model_name="governmentplan", name="public",
name="title", field=models.BooleanField(default=False, verbose_name="is public?"),
field=models.CharField(max_length=255, verbose_name="title"),
),
migrations.AlterField(
model_name="governmentplanupdate",
name="content",
field=models.TextField(blank=True, verbose_name="content"),
),
migrations.AlterField(
model_name="governmentplanupdate",
name="foirequest",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="foirequest.foirequest",
verbose_name="FOI request",
), ),
), migrations.AlterField(
migrations.AlterField( model_name="government",
model_name="governmentplanupdate", name="slug",
name="organization", field=models.SlugField(
field=models.ForeignKey( max_length=255, unique=True, verbose_name="slug"
blank=True, ),
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="organization.organization",
verbose_name="organization",
), ),
), migrations.AlterField(
migrations.AlterField( model_name="government",
model_name="governmentplanupdate", name="start_date",
name="plan", field=models.DateField(
field=models.ForeignKey( blank=True, null=True, verbose_name="start date"
on_delete=django.db.models.deletion.CASCADE, ),
related_name="updates",
to="froide_govplan.governmentplan",
verbose_name="plan",
), ),
), migrations.AlterField(
migrations.AlterField( model_name="governmentplan",
model_name="governmentplanupdate", name="description",
name="public", field=models.TextField(blank=True, verbose_name="description"),
field=models.BooleanField(default=False, verbose_name="is public?"),
),
migrations.AlterField(
model_name="governmentplanupdate",
name="rating",
field=models.IntegerField(
blank=True,
choices=[
(1, "terrible"),
(2, "bad"),
(3, "OK"),
(4, "good"),
(5, "excellent"),
],
null=True,
verbose_name="rating",
), ),
), migrations.AlterField(
migrations.AlterField( model_name="governmentplan",
model_name="governmentplanupdate", name="government",
name="status", field=models.ForeignKey(
field=models.CharField( on_delete=django.db.models.deletion.CASCADE,
blank=True, to="froide_govplan.government",
choices=[ verbose_name="government",
("not_started", "not started"), ),
("started", "started"),
("partially_implemented", "partially implemented"),
("implemented", "implemented"),
("deferred", "deferred"),
],
default="",
max_length=25,
verbose_name="status",
), ),
), migrations.AlterField(
migrations.AlterField( model_name="governmentplan",
model_name="governmentplanupdate", name="group",
name="timestamp", field=models.ForeignKey(
field=models.DateTimeField( blank=True,
default=django.utils.timezone.now, verbose_name="timestamp" null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="auth.group",
verbose_name="group",
),
), ),
), migrations.AlterField(
migrations.AlterField( model_name="governmentplan",
model_name="governmentplanupdate", name="organization",
name="title", field=models.ForeignKey(
field=models.CharField(blank=True, max_length=1024, verbose_name="title"), blank=True,
), null=True,
migrations.AlterField( on_delete=django.db.models.deletion.SET_NULL,
model_name="governmentplanupdate", to="organization.organization",
name="url", verbose_name="organization",
field=models.URLField(blank=True, verbose_name="URL"), ),
),
migrations.AlterField(
model_name="governmentplanupdate",
name="user",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to=settings.AUTH_USER_MODEL,
verbose_name="user",
), ),
), migrations.AlterField(
] model_name="governmentplan",
name="public",
field=models.BooleanField(default=False, verbose_name="is public?"),
),
migrations.AlterField(
model_name="governmentplan",
name="rating",
field=models.IntegerField(
blank=True,
choices=[
(1, "terrible"),
(2, "bad"),
(3, "OK"),
(4, "good"),
(5, "excellent"),
],
null=True,
verbose_name="rating",
),
),
migrations.AlterField(
model_name="governmentplan",
name="reference",
field=models.CharField(
blank=True, max_length=255, verbose_name="reference"
),
),
migrations.AlterField(
model_name="governmentplan",
name="responsible_publicbody",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="publicbody.publicbody",
verbose_name="responsible public body",
),
),
migrations.AlterField(
model_name="governmentplan",
name="slug",
field=models.SlugField(
max_length=255, unique=True, verbose_name="slug"
),
),
migrations.AlterField(
model_name="governmentplan",
name="status",
field=models.CharField(
choices=[
("not_started", "not started"),
("started", "started"),
("partially_implemented", "partially implemented"),
("implemented", "implemented"),
("deferred", "deferred"),
],
default="not_started",
max_length=25,
verbose_name="status",
),
),
migrations.AlterField(
model_name="governmentplan",
name="title",
field=models.CharField(max_length=255, verbose_name="title"),
),
migrations.AlterField(
model_name="governmentplanupdate",
name="content",
field=models.TextField(blank=True, verbose_name="content"),
),
]
+ (
[
migrations.AlterField(
model_name="governmentplanupdate",
name="foirequest",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="foirequest.foirequest",
verbose_name="FOI request",
),
),
]
if conf.GOVPLAN_ENABLE_FOIREQUEST
else []
)
+ [
migrations.AlterField(
model_name="governmentplanupdate",
name="organization",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="organization.organization",
verbose_name="organization",
),
),
migrations.AlterField(
model_name="governmentplanupdate",
name="plan",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="updates",
to="froide_govplan.governmentplan",
verbose_name="plan",
),
),
migrations.AlterField(
model_name="governmentplanupdate",
name="public",
field=models.BooleanField(default=False, verbose_name="is public?"),
),
migrations.AlterField(
model_name="governmentplanupdate",
name="rating",
field=models.IntegerField(
blank=True,
choices=[
(1, "terrible"),
(2, "bad"),
(3, "OK"),
(4, "good"),
(5, "excellent"),
],
null=True,
verbose_name="rating",
),
),
migrations.AlterField(
model_name="governmentplanupdate",
name="status",
field=models.CharField(
blank=True,
choices=[
("not_started", "not started"),
("started", "started"),
("partially_implemented", "partially implemented"),
("implemented", "implemented"),
("deferred", "deferred"),
],
default="",
max_length=25,
verbose_name="status",
),
),
migrations.AlterField(
model_name="governmentplanupdate",
name="timestamp",
field=models.DateTimeField(
default=django.utils.timezone.now, verbose_name="timestamp"
),
),
migrations.AlterField(
model_name="governmentplanupdate",
name="title",
field=models.CharField(
blank=True, max_length=1024, verbose_name="title"
),
),
migrations.AlterField(
model_name="governmentplanupdate",
name="url",
field=models.URLField(blank=True, verbose_name="URL"),
),
migrations.AlterField(
model_name="governmentplanupdate",
name="user",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to=settings.AUTH_USER_MODEL,
verbose_name="user",
),
),
]
)

View file

@ -15,7 +15,6 @@ from filer.fields.image import FilerImageField
from taggit.managers import TaggableManager from taggit.managers import TaggableManager
from taggit.models import TaggedItemBase from taggit.models import TaggedItemBase
from froide.foirequest.models import FoiRequest
from froide.follow.models import Follower from froide.follow.models import Follower
from froide.georegion.models import GeoRegion from froide.georegion.models import GeoRegion
from froide.organization.models import Organization from froide.organization.models import Organization
@ -32,6 +31,12 @@ except ImportError:
PlaceholderField = None PlaceholderField = None
if conf.GOVPLAN_ENABLE_FOIREQUEST:
from froide.foirequest.models import FoiRequest
else:
FoiRequest = None
class PlanStatus(models.TextChoices): class PlanStatus(models.TextChoices):
NOT_STARTED = ("not_started", _("not started")) NOT_STARTED = ("not_started", _("not started"))
STARTED = ("started", _("started")) STARTED = ("started", _("started"))
@ -308,6 +313,8 @@ class GovernmentPlan(models.Model):
return "govplan:plan@{}".format(self.pk) return "govplan:plan@{}".format(self.pk)
def get_related_foirequests(self): def get_related_foirequests(self):
if FoiRequest is None:
return []
if not self.responsible_publicbody: if not self.responsible_publicbody:
return [] return []
if hasattr(self, "_related_foirequests"): if hasattr(self, "_related_foirequests"):
@ -363,13 +370,14 @@ class GovernmentPlanUpdate(models.Model):
) )
public = models.BooleanField(default=False, verbose_name=_("is public?")) public = models.BooleanField(default=False, verbose_name=_("is public?"))
foirequest = models.ForeignKey( if FoiRequest:
FoiRequest, foirequest = models.ForeignKey(
null=True, FoiRequest,
blank=True, null=True,
on_delete=models.SET_NULL, blank=True,
verbose_name=_("FOI request"), on_delete=models.SET_NULL,
) verbose_name=_("FOI request"),
)
class Meta: class Meta:
ordering = ("-timestamp",) ordering = ("-timestamp",)