Total milestones must never be null
parent
a2203d0bf8
commit
9016e48ff6
|
@ -0,0 +1,26 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
|
||||||
|
def update_total_milestones(apps, schema_editor):
|
||||||
|
Project = apps.get_model("projects", "Project")
|
||||||
|
for project in Project.objects.filter(total_milestones__isnull=True):
|
||||||
|
project.total_milestones = 0
|
||||||
|
project.save()
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('projects', '0005_membership_invitation_extra_text'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RunPython(update_total_milestones),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='project',
|
||||||
|
name='total_milestones',
|
||||||
|
field=models.IntegerField(verbose_name='total of milestones', default=0),
|
||||||
|
),
|
||||||
|
]
|
|
@ -131,7 +131,7 @@ class Project(ProjectDefaults, TaggedMixin, models.Model):
|
||||||
members = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name="projects",
|
members = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name="projects",
|
||||||
through="Membership", verbose_name=_("members"),
|
through="Membership", verbose_name=_("members"),
|
||||||
through_fields=("project", "user"))
|
through_fields=("project", "user"))
|
||||||
total_milestones = models.IntegerField(default=0, null=True, blank=True,
|
total_milestones = models.IntegerField(default=0, null=False, blank=False,
|
||||||
verbose_name=_("total of milestones"))
|
verbose_name=_("total of milestones"))
|
||||||
total_story_points = models.FloatField(default=0, verbose_name=_("total story points"))
|
total_story_points = models.FloatField(default=0, verbose_name=_("total story points"))
|
||||||
|
|
||||||
|
|
|
@ -179,6 +179,15 @@ class ProjectSerializer(ModelSerializer):
|
||||||
return is_project_owner(self.context["request"].user, obj)
|
return is_project_owner(self.context["request"].user, obj)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def validate_total_milestones(self, attrs, source):
|
||||||
|
"""
|
||||||
|
Check that total_milestones is not null, it's an optional parameter but
|
||||||
|
not nullable in the model.
|
||||||
|
"""
|
||||||
|
value = attrs[source]
|
||||||
|
if value is None:
|
||||||
|
raise serializers.ValidationError("Total milestones must be major or equal to zero")
|
||||||
|
return attrs
|
||||||
|
|
||||||
class ProjectDetailSerializer(ProjectSerializer):
|
class ProjectDetailSerializer(ProjectSerializer):
|
||||||
roles = serializers.SerializerMethodField("get_roles")
|
roles = serializers.SerializerMethodField("get_roles")
|
||||||
|
|
Loading…
Reference in New Issue