diff --git a/turkle/migrations/0014_alter_batch_allotted_assignment_time_and_more.py b/turkle/migrations/0014_alter_batch_allotted_assignment_time_and_more.py new file mode 100644 index 00000000..ed23c1ff --- /dev/null +++ b/turkle/migrations/0014_alter_batch_allotted_assignment_time_and_more.py @@ -0,0 +1,34 @@ +# Generated by Django 4.2.23 on 2025-06-28 15:40 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('turkle', '0013_activeproject_activeuser'), + ] + + operations = [ + migrations.AlterField( + model_name='batch', + name='allotted_assignment_time', + field=models.IntegerField(default=24, validators=[django.core.validators.MinValueValidator(1)]), + ), + migrations.AlterField( + model_name='batch', + name='assignments_per_task', + field=models.IntegerField(default=1, validators=[django.core.validators.MinValueValidator(1)], verbose_name='Assignments per Task'), + ), + migrations.AlterField( + model_name='project', + name='allotted_assignment_time', + field=models.IntegerField(default=24, validators=[django.core.validators.MinValueValidator(1)]), + ), + migrations.AlterField( + model_name='project', + name='assignments_per_task', + field=models.IntegerField(db_index=True, default=1, validators=[django.core.validators.MinValueValidator(1)]), + ), + ] diff --git a/turkle/models.py b/turkle/models.py index a7faa4e0..a16e1eac 100644 --- a/turkle/models.py +++ b/turkle/models.py @@ -11,6 +11,7 @@ from django.conf import settings from django.contrib.auth import get_user_model from django.core.exceptions import ValidationError +from django.core.validators import MinValueValidator from django.db import models from django.db.models import Count, IntegerField, Max, Q, OuterRef, Prefetch, Subquery from django.db.models.functions import Coalesce @@ -226,13 +227,24 @@ class Meta: verbose_name_plural = "Batches" active = models.BooleanField(db_index=True, default=True) - allotted_assignment_time = models.IntegerField(default=24) - assignments_per_task = models.IntegerField(default=1, verbose_name='Assignments per Task') + allotted_assignment_time = models.IntegerField( + default=24, + validators=[MinValueValidator(1)] + ) + assignments_per_task = models.IntegerField( + default=1, + validators=[MinValueValidator(1)], + verbose_name='Assignments per Task' + ) completed = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) - created_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, - related_name='created_batches', on_delete=models.CASCADE, - verbose_name='creator') + created_by = models.ForeignKey( + settings.AUTH_USER_MODEL, + null=True, + related_name='created_batches', + on_delete=models.CASCADE, + verbose_name='creator' + ) custom_permissions = models.BooleanField(default=False) filename = models.CharField(max_length=1024) login_required = models.BooleanField(db_index=True, default=True) @@ -769,12 +781,24 @@ class Meta: ordering = ['-id'] active = models.BooleanField(db_index=True, default=True) - allotted_assignment_time = models.IntegerField(default=24) - assignments_per_task = models.IntegerField(db_index=True, default=1) + # assignment time is in hours + allotted_assignment_time = models.IntegerField( + default=24, + validators=[MinValueValidator(1)] + ) + assignments_per_task = models.IntegerField( + db_index=True, + default=1, + validators=[MinValueValidator(1)] + ) created_at = models.DateTimeField(auto_now_add=True) - created_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, - related_name='created_projects', - on_delete=models.CASCADE, verbose_name='creator') + created_by = models.ForeignKey( + settings.AUTH_USER_MODEL, + null=True, + related_name='created_projects', + on_delete=models.CASCADE, + verbose_name='creator' + ) custom_permissions = models.BooleanField(default=False) filename = models.CharField(max_length=1024, blank=True) html_template = models.TextField() @@ -782,10 +806,12 @@ class Meta: login_required = models.BooleanField(db_index=True, default=True) name = models.CharField(max_length=1024) updated_at = models.DateTimeField(auto_now=True) - updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, - related_name='updated_projects', - on_delete=models.CASCADE) - + updated_by = models.ForeignKey( + settings.AUTH_USER_MODEL, + null=True, + related_name='updated_projects', + on_delete=models.CASCADE + ) # Fieldnames are automatically extracted from html_template text fieldnames = JSONField(blank=True)