From 94a9d63c90b025d4aaeb07475287add64dab1fef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barnab=C3=A1s=20Cz=C3=A9m=C3=A1n?= <trabarni@gmail.com> Date: Sat, 3 Feb 2018 20:19:20 +0100 Subject: [PATCH] Fix deadline validate --- .../migrations/0013_auto_20180203_2007.py | 18 +++++++++++++++ .../migrations/0014_auto_20180203_2010.py | 18 +++++++++++++++ .../migrations/0015_auto_20180203_2014.py | 23 +++++++++++++++++++ src/account/models.py | 5 ++-- src/account/serializers.py | 13 ++++++++--- 5 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 src/account/migrations/0013_auto_20180203_2007.py create mode 100644 src/account/migrations/0014_auto_20180203_2010.py create mode 100644 src/account/migrations/0015_auto_20180203_2014.py diff --git a/src/account/migrations/0013_auto_20180203_2007.py b/src/account/migrations/0013_auto_20180203_2007.py new file mode 100644 index 0000000..8ac041e --- /dev/null +++ b/src/account/migrations/0013_auto_20180203_2007.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.1 on 2018-02-03 19:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0012_auto_20180125_1957'), + ] + + operations = [ + migrations.AlterField( + model_name='profile', + name='join_date', + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/src/account/migrations/0014_auto_20180203_2010.py b/src/account/migrations/0014_auto_20180203_2010.py new file mode 100644 index 0000000..0ad3c05 --- /dev/null +++ b/src/account/migrations/0014_auto_20180203_2010.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.1 on 2018-02-03 19:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0013_auto_20180203_2007'), + ] + + operations = [ + migrations.AlterField( + model_name='deadline', + name='deadline', + field=models.DateTimeField(null=True), + ), + ] diff --git a/src/account/migrations/0015_auto_20180203_2014.py b/src/account/migrations/0015_auto_20180203_2014.py new file mode 100644 index 0000000..e823387 --- /dev/null +++ b/src/account/migrations/0015_auto_20180203_2014.py @@ -0,0 +1,23 @@ +# Generated by Django 2.0.1 on 2018-02-03 19:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0014_auto_20180203_2010'), + ] + + operations = [ + migrations.AddField( + model_name='profile', + name='updated_at', + field=models.DateTimeField(auto_now=True), + ), + migrations.AlterField( + model_name='profile', + name='join_date', + field=models.DateTimeField(auto_now_add=True), + ), + ] diff --git a/src/account/models.py b/src/account/models.py index 08fe3b7..8e86ff9 100644 --- a/src/account/models.py +++ b/src/account/models.py @@ -19,7 +19,8 @@ class GroupChoice(models.Model): class Profile(models.Model): - join_date = models.DateField(auto_now=True) + join_date = models.DateTimeField(auto_now_add=True, editable=False) + updated_at = models.DateTimeField(auto_now=True, editable=False) user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE) motivation = models.TextField(null=True) nick = models.CharField(max_length=15, blank=True, null=True) @@ -32,4 +33,4 @@ class Profile(models.Model): class Deadline(SingletonModel): - deadline = models.DateField(null=True) + deadline = models.DateTimeField(null=True) diff --git a/src/account/serializers.py b/src/account/serializers.py index e04ea58..bee56c0 100644 --- a/src/account/serializers.py +++ b/src/account/serializers.py @@ -10,12 +10,19 @@ class ChoiceSerializer(serializers.ModelSerializer): class ProfileSerializer(serializers.ModelSerializer): groups = serializers.SlugRelatedField(many=True, slug_field="choice", queryset=models.GroupChoice.objects.all()) + updated_at = serializers.DateTimeField(read_only=True) + signed = serializers.BooleanField() class Meta: model = models.Profile - fields = ('id', 'join_date', 'user', 'nick', 'motivation', 'signed', 'groups') + fields = ('id', 'join_date', 'updated_at', 'user', 'nick', 'motivation', 'signed', 'groups') def validate(self, data): - if data['join_date'] > models.Deadline.get_solo().deadline: - raise serializers.ValidationError("join_date more than deadline") + deadline = models.Deadline.get_solo().deadline + if deadline is None: + return data + + if data['signed'] is True and data['updated_at'] > deadline: + raise serializers.ValidationError("You cannot join after the deadline") + return data -- GitLab