diff options
author | 2020-07-29 13:55:46 +0200 | |
---|---|---|
committer | 2020-07-29 13:55:46 +0200 | |
commit | 0d7c95a80692f15c36b36152034e3bbe54e3c37c (patch) | |
tree | 5f98405211fd9af8be3497b89fbb08fe53fe94f6 /pydis_site | |
parent | Rename AllowDenyList to FilterList (diff) |
Handle unique validator in DRF, not Django.
I was handling this in a Django vanilla kind of way, which was causing
the constraint to return a 500 instead of a 400. This changes the
approach to use the DRF way, and makes it return 400.
It doesn't actually change the way anything behaves, other than
returning the right status code.
Diffstat (limited to 'pydis_site')
-rw-r--r-- | pydis_site/apps/api/migrations/0057_create_new_filterlist_model.py | 4 | ||||
-rw-r--r-- | pydis_site/apps/api/models/bot/filter_list.py | 11 | ||||
-rw-r--r-- | pydis_site/apps/api/serializers.py | 15 |
3 files changed, 15 insertions, 15 deletions
diff --git a/pydis_site/apps/api/migrations/0057_create_new_filterlist_model.py b/pydis_site/apps/api/migrations/0057_create_new_filterlist_model.py index 44025ee8..b5398568 100644 --- a/pydis_site/apps/api/migrations/0057_create_new_filterlist_model.py +++ b/pydis_site/apps/api/migrations/0057_create_new_filterlist_model.py @@ -25,9 +25,5 @@ class Migration(migrations.Migration): ('comment', models.TextField(help_text="Optional comment on this entry.", null=True)), ], bases=(pydis_site.apps.api.models.mixins.ModelReprMixin, models.Model), - ), - migrations.AddConstraint( - model_name='filterlist', - constraint=models.UniqueConstraint(fields=('content', 'type'), name='unique_filter_list'), ) ] diff --git a/pydis_site/apps/api/models/bot/filter_list.py b/pydis_site/apps/api/models/bot/filter_list.py index d279e137..5961aed7 100644 --- a/pydis_site/apps/api/models/bot/filter_list.py +++ b/pydis_site/apps/api/models/bot/filter_list.py @@ -28,14 +28,3 @@ class FilterList(ModelTimestampMixin, ModelReprMixin, models.Model): help_text="Optional comment on this entry.", null=True ) - - class Meta: - """Metaconfig for this model.""" - - # This constraint ensures only one filterlist with the - # same content can exist. This means that we cannot have both an allow - # and a deny for the same item, and we cannot have duplicates of the - # same item. - constraints = [ - models.UniqueConstraint(fields=['content', 'type'], name='unique_filter_list'), - ] diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py index 8fd40da7..54bb8a5d 100644 --- a/pydis_site/apps/api/serializers.py +++ b/pydis_site/apps/api/serializers.py @@ -113,6 +113,21 @@ class FilterListSerializer(ModelSerializer): model = FilterList fields = ('id', 'created_at', 'updated_at', 'type', 'allowed', 'content', 'comment') + # This validator ensures only one filterlist with the + # same content can exist. This means that we cannot have both an allow + # and a deny for the same item, and we cannot have duplicates of the + # same item. + validators = [ + UniqueTogetherValidator( + queryset=FilterList.objects.all(), + fields=['content', 'type'], + message=( + "A filterlist for this item already exists. " + "Please note that you cannot add the same item to both allow and deny." + ) + ), + ] + class InfractionSerializer(ModelSerializer): """A class providing (de-)serialization of `Infraction` instances.""" |