|
|
@@ -3,6 +3,9 @@ import datetime
|
|
|
import uuid
|
|
|
|
|
|
from django.contrib.auth.models import User
|
|
|
+from django.contrib.contenttypes.fields import GenericForeignKey, \
|
|
|
+ GenericRelation
|
|
|
+from django.contrib.contenttypes.models import ContentType
|
|
|
from django.core import serializers
|
|
|
from django.db import models, connection
|
|
|
from django.db.models.aggregates import Sum
|
|
|
@@ -26,18 +29,38 @@ class BaseModel(models.Model):
|
|
|
class Meta:
|
|
|
abstract = True
|
|
|
|
|
|
+ def get_content_type(self):
|
|
|
+ return ContentType.objects.get_for_model(self)
|
|
|
+
|
|
|
def model_name(self):
|
|
|
try:
|
|
|
return self._meta.verbose_name
|
|
|
except AttributeError:
|
|
|
return ""
|
|
|
|
|
|
- def comments(self):
|
|
|
- return Comment.objects.filter(obj_uuid = self.uuid)
|
|
|
-
|
|
|
def to_json(self):
|
|
|
return serializers.serialize('json', [ self, ])
|
|
|
|
|
|
+
|
|
|
+class Comment(BaseModel):
|
|
|
+ class Meta:
|
|
|
+ verbose_name = "commentaire"
|
|
|
+ verbose_name_plural = "commentaires"
|
|
|
+ ordering = ('-created', )
|
|
|
+
|
|
|
+ def __str__(self):
|
|
|
+ return "De {}, le {:%Y-%m-%d}: {}".format(self.author.username, self.created, self.content[:30])
|
|
|
+
|
|
|
+ content_type = models.ForeignKey(ContentType,on_delete=models.CASCADE)
|
|
|
+ object_id = models.PositiveIntegerField()
|
|
|
+ content_object = GenericForeignKey('content_type', 'object_id')
|
|
|
+
|
|
|
+ content = MartorField(blank=False, default="", verbose_name="Commentaire")
|
|
|
+ author = models.ForeignKey(User,
|
|
|
+ on_delete=models.PROTECT,
|
|
|
+ verbose_name="Auteur")
|
|
|
+ created = models.DateTimeField(auto_now_add=True)
|
|
|
+
|
|
|
class Project(BaseModel):
|
|
|
class Meta:
|
|
|
verbose_name = "projet"
|
|
|
@@ -70,6 +93,7 @@ class Epic(BaseModel):
|
|
|
description = MartorField(blank=True, default="", verbose_name="Description")
|
|
|
project = models.ForeignKey(Project, on_delete=models.PROTECT, null=True, verbose_name="Projet")
|
|
|
closed = models.BooleanField(default=False, verbose_name="Clôturée")
|
|
|
+ comments = GenericRelation(Comment)
|
|
|
|
|
|
def __str__(self):
|
|
|
return self.name
|
|
|
@@ -193,6 +217,7 @@ class Story(BaseModel):
|
|
|
related_name="stories",
|
|
|
related_query_name="story",
|
|
|
verbose_name="Sprints")
|
|
|
+ comments = GenericRelation(Comment)
|
|
|
|
|
|
def __str__(self):
|
|
|
return self.name
|
|
|
@@ -217,17 +242,4 @@ class Story(BaseModel):
|
|
|
self.closed = False
|
|
|
self.save()
|
|
|
|
|
|
-class Comment(BaseModel):
|
|
|
- class Meta:
|
|
|
- verbose_name = "commentaire"
|
|
|
- verbose_name_plural = "commentaires"
|
|
|
- ordering = ('-created', )
|
|
|
-
|
|
|
- def __str__(self):
|
|
|
- return "De {}, le {:%Y-%m-%d}: {}".format(self.author.username, self.created, self.content[:30])
|
|
|
-
|
|
|
- obj_uuid = models.UUIDField(default="")
|
|
|
- content = MartorField(blank=False, default="", verbose_name="Commentaire")
|
|
|
- author = models.ForeignKey(User,
|
|
|
- on_delete=models.PROTECT,
|
|
|
- verbose_name="Auteur")
|
|
|
+
|