Initial implementation of users list api call.
parent
3036396d8c
commit
bc4aa2cb4f
|
@ -9,10 +9,13 @@ from rest_framework.parsers import JSONParser
|
||||||
from rest_framework.reverse import reverse
|
from rest_framework.reverse import reverse
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
from rest_framework.permissions import IsAuthenticated
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
|
from rest_framework import generics
|
||||||
|
|
||||||
from greenmine.base.serializers import LoginSerializer, UserLogged
|
from greenmine.base.serializers import LoginSerializer, UserLogged, UserSerializer
|
||||||
from greenmine.base.models import User
|
from greenmine.base.models import User
|
||||||
|
from greenmine.scrum import models
|
||||||
|
|
||||||
|
|
||||||
class ApiRoot(APIView):
|
class ApiRoot(APIView):
|
||||||
|
@ -23,8 +26,7 @@ class ApiRoot(APIView):
|
||||||
'projects': reverse('project-list', request=request, format=format),
|
'projects': reverse('project-list', request=request, format=format),
|
||||||
'milestones': reverse('milestone-list', request=request, format=format),
|
'milestones': reverse('milestone-list', request=request, format=format),
|
||||||
'user-stories': reverse('user-story-list', request=request, format=format),
|
'user-stories': reverse('user-story-list', request=request, format=format),
|
||||||
'changes': reverse('change-list', request=request, format=format),
|
'attachments': reverse('attachment-list', request=request, format=format),
|
||||||
'change-attachments': reverse('change-attachment-list', request=request, format=format),
|
|
||||||
'tasks': reverse('task-list', request=request, format=format),
|
'tasks': reverse('task-list', request=request, format=format),
|
||||||
'issues': reverse('issue-list', request=request, format=format),
|
'issues': reverse('issue-list', request=request, format=format),
|
||||||
'severities': reverse('severity-list', request=request, format=format),
|
'severities': reverse('severity-list', request=request, format=format),
|
||||||
|
@ -39,9 +41,33 @@ class ApiRoot(APIView):
|
||||||
'question_responses': reverse('question-response-list', request=request, format=format),
|
'question_responses': reverse('question-response-list', request=request, format=format),
|
||||||
'wiki_pages': reverse('wiki-page-list', request=request, format=format),
|
'wiki_pages': reverse('wiki-page-list', request=request, format=format),
|
||||||
'wiki_page_attachments': reverse('wiki-page-attachment-list', request=request, format=format),
|
'wiki_page_attachments': reverse('wiki-page-attachment-list', request=request, format=format),
|
||||||
|
'users': reverse('user-list', request=request, format=format),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#class UserFilter(django_filters.FilterSet):
|
||||||
|
# no_milestone = django_filters.NumberFilter(name="mileston", lookup_type='isnull')
|
||||||
|
#
|
||||||
|
# class Meta:
|
||||||
|
# model = UserStory
|
||||||
|
# fields = ['project', 'milestone', 'no_milestone']
|
||||||
|
|
||||||
|
|
||||||
|
class UserList(generics.ListCreateAPIView):
|
||||||
|
model = User
|
||||||
|
serializer_class = UserSerializer
|
||||||
|
permission_classes = (IsAuthenticated,)
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
projects = models.Project.objects.filter(members=self.request.user)
|
||||||
|
return super(UserList, self).get_queryset().filter(projects__in=projects)\
|
||||||
|
.order_by('id').distinct()
|
||||||
|
|
||||||
|
def pre_save(self, obj):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Login(APIView):
|
class Login(APIView):
|
||||||
def post(self, request, format=None):
|
def post(self, request, format=None):
|
||||||
username = request.DATA.get('username', None)
|
username = request.DATA.get('username', None)
|
||||||
|
|
|
@ -169,36 +169,6 @@
|
||||||
"questions",
|
"questions",
|
||||||
"questionresponse"
|
"questionresponse"
|
||||||
],
|
],
|
||||||
[
|
|
||||||
"add_change",
|
|
||||||
"scrum",
|
|
||||||
"change"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"change_change",
|
|
||||||
"scrum",
|
|
||||||
"change"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"delete_change",
|
|
||||||
"scrum",
|
|
||||||
"change"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"add_changeattachment",
|
|
||||||
"scrum",
|
|
||||||
"changeattachment"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"change_changeattachment",
|
|
||||||
"scrum",
|
|
||||||
"changeattachment"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"delete_changeattachment",
|
|
||||||
"scrum",
|
|
||||||
"changeattachment"
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
"add_issue",
|
"add_issue",
|
||||||
"scrum",
|
"scrum",
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
from greenmine.base.models import User
|
||||||
|
|
||||||
|
|
||||||
class UserLogged(object):
|
class UserLogged(object):
|
||||||
|
@ -48,3 +51,10 @@ class LoginSerializer(serializers.Serializer):
|
||||||
instance.colorize_tags = attrs.get('colorize_tags', instance.colorize_tags)
|
instance.colorize_tags = attrs.get('colorize_tags', instance.colorize_tags)
|
||||||
return instance
|
return instance
|
||||||
return UserLogged(**attrs)
|
return UserLogged(**attrs)
|
||||||
|
|
||||||
|
|
||||||
|
class UserSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = User
|
||||||
|
exclude = ('password',)
|
||||||
|
#fields = ('id', 'username')
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
from django.conf.urls import patterns, url
|
# -*- coding: utf-8 -*-
|
||||||
from rest_framework.urlpatterns import format_suffix_patterns
|
|
||||||
|
|
||||||
from greenmine.base.api import Login, Logout, ApiRoot
|
from rest_framework.urlpatterns import format_suffix_patterns
|
||||||
|
from django.conf.urls import patterns, url
|
||||||
|
from greenmine.base import api
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = format_suffix_patterns(patterns('',
|
urlpatterns = format_suffix_patterns(patterns('',
|
||||||
url(r'^auth/login/$', Login.as_view(), name='login'),
|
url(r'^auth/login/$', api.Login.as_view(), name='login'),
|
||||||
url(r'^auth/logout/$', Logout.as_view(), name='logout'),
|
url(r'^auth/logout/$', api.Logout.as_view(), name='logout'),
|
||||||
url(r'^$', ApiRoot.as_view(), name='api_root'),
|
url(r'^users/$', api.UserList.as_view(), name="user-list"),
|
||||||
|
url(r'^$', api.ApiRoot.as_view(), name='api_root'),
|
||||||
))
|
))
|
||||||
|
|
|
@ -50,16 +50,10 @@ class UserStoryAdmin(reversion.VersionAdmin):
|
||||||
admin.site.register(models.UserStory, UserStoryAdmin)
|
admin.site.register(models.UserStory, UserStoryAdmin)
|
||||||
|
|
||||||
|
|
||||||
class ChangeAdmin(reversion.VersionAdmin):
|
class AttachmentAdmin(reversion.VersionAdmin):
|
||||||
list_display = ["id", "change_type", "project", "owner"]
|
list_display = ["id", "owner"]
|
||||||
|
|
||||||
admin.site.register(models.Change, ChangeAdmin)
|
admin.site.register(models.Attachment, AttachmentAdmin)
|
||||||
|
|
||||||
|
|
||||||
class ChangeAttachmentAdmin(reversion.VersionAdmin):
|
|
||||||
list_display = ["id", "change", "owner"]
|
|
||||||
|
|
||||||
admin.site.register(models.ChangeAttachment, ChangeAttachmentAdmin)
|
|
||||||
|
|
||||||
|
|
||||||
class TaskAdmin(reversion.VersionAdmin):
|
class TaskAdmin(reversion.VersionAdmin):
|
||||||
|
|
|
@ -7,6 +7,7 @@ from greenmine.scrum.serializers import *
|
||||||
from greenmine.scrum.models import *
|
from greenmine.scrum.models import *
|
||||||
from greenmine.scrum.permissions import *
|
from greenmine.scrum.permissions import *
|
||||||
|
|
||||||
|
|
||||||
class UserStoryFilter(django_filters.FilterSet):
|
class UserStoryFilter(django_filters.FilterSet):
|
||||||
no_milestone = django_filters.NumberFilter(name="milestone", lookup_type='isnull')
|
no_milestone = django_filters.NumberFilter(name="milestone", lookup_type='isnull')
|
||||||
|
|
||||||
|
@ -99,9 +100,9 @@ class UserStoryDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||||
permission_classes = (IsAuthenticated, UserStoryDetailPermission,)
|
permission_classes = (IsAuthenticated, UserStoryDetailPermission,)
|
||||||
|
|
||||||
|
|
||||||
class ChangeList(generics.ListCreateAPIView):
|
class AttachmentList(generics.ListCreateAPIView):
|
||||||
model = Change
|
model = Attachment
|
||||||
serializer_class = ChangeSerializer
|
serializer_class = AttachmentSerializer
|
||||||
permission_classes = (IsAuthenticated,)
|
permission_classes = (IsAuthenticated,)
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
|
@ -111,28 +112,10 @@ class ChangeList(generics.ListCreateAPIView):
|
||||||
obj.owner = self.request.user
|
obj.owner = self.request.user
|
||||||
|
|
||||||
|
|
||||||
class ChangeDetail(generics.RetrieveUpdateDestroyAPIView):
|
class AttachmentDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||||
model = Change
|
model = Attachment
|
||||||
serializer_class = ChangeSerializer
|
serializer_class = AttachmentSerializer
|
||||||
permission_classes = (IsAuthenticated, ChangeDetailPermission,)
|
permission_classes = (IsAuthenticated, AttachmentDetailPermission,)
|
||||||
|
|
||||||
|
|
||||||
class ChangeAttachmentList(generics.ListCreateAPIView):
|
|
||||||
model = ChangeAttachment
|
|
||||||
serializer_class = ChangeAttachmentSerializer
|
|
||||||
permission_classes = (IsAuthenticated,)
|
|
||||||
|
|
||||||
def get_queryset(self):
|
|
||||||
return self.model.objects.filter(change__project__members=self.request.user)
|
|
||||||
|
|
||||||
def pre_save(self, obj):
|
|
||||||
obj.owner = self.request.user
|
|
||||||
|
|
||||||
|
|
||||||
class ChangeAttachmentDetail(generics.RetrieveUpdateDestroyAPIView):
|
|
||||||
model = ChangeAttachment
|
|
||||||
serializer_class = ChangeAttachmentSerializer
|
|
||||||
permission_classes = (IsAuthenticated, ChangeAttachmentDetailPermission,)
|
|
||||||
|
|
||||||
|
|
||||||
class TaskList(generics.ListCreateAPIView):
|
class TaskList(generics.ListCreateAPIView):
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
@ -245,29 +244,18 @@ class UserStory(models.Model):
|
||||||
return self.status.is_closed
|
return self.status.is_closed
|
||||||
|
|
||||||
|
|
||||||
class Change(models.Model):
|
class Attachment(models.Model):
|
||||||
change_type = models.IntegerField(choices=TASK_CHANGE_CHOICES)
|
owner = models.ForeignKey("base.User", related_name="change_attachments")
|
||||||
owner = models.ForeignKey('base.User', related_name='changes')
|
project = models.ForeignKey("Project", related_name="attachments")
|
||||||
created_date = models.DateTimeField(auto_now_add=True)
|
|
||||||
|
|
||||||
project = models.ForeignKey("Project", related_name="changes")
|
|
||||||
|
|
||||||
content_type = models.ForeignKey(ContentType)
|
content_type = models.ForeignKey(ContentType)
|
||||||
object_id = models.PositiveIntegerField()
|
object_id = models.PositiveIntegerField()
|
||||||
content_object = generic.GenericForeignKey('content_type', 'object_id')
|
content_object = generic.GenericForeignKey('content_type', 'object_id')
|
||||||
|
|
||||||
data = PickledObjectField()
|
|
||||||
tags = PickledObjectField()
|
|
||||||
|
|
||||||
|
|
||||||
class ChangeAttachment(models.Model):
|
|
||||||
change = models.ForeignKey("Change", related_name="attachments")
|
|
||||||
owner = models.ForeignKey("base.User", related_name="change_attachments")
|
|
||||||
|
|
||||||
created_date = models.DateTimeField(auto_now_add=True)
|
created_date = models.DateTimeField(auto_now_add=True)
|
||||||
attached_file = models.FileField(upload_to="files/msg", max_length=500,
|
attached_file = models.FileField(upload_to="files/msg", max_length=500,
|
||||||
null=True, blank=True)
|
null=True, blank=True)
|
||||||
tags = PickledObjectField()
|
|
||||||
|
|
||||||
|
|
||||||
class Task(models.Model):
|
class Task(models.Model):
|
||||||
|
@ -300,7 +288,6 @@ class Task(models.Model):
|
||||||
watchers = models.ManyToManyField('base.User', related_name='task_watch',
|
watchers = models.ManyToManyField('base.User', related_name='task_watch',
|
||||||
null=True)
|
null=True)
|
||||||
|
|
||||||
changes = generic.GenericRelation(Change)
|
|
||||||
tags = PickledObjectField()
|
tags = PickledObjectField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -358,7 +345,6 @@ class Issue(models.Model):
|
||||||
watchers = models.ManyToManyField('base.User', related_name='issue_watch',
|
watchers = models.ManyToManyField('base.User', related_name='issue_watch',
|
||||||
null=True)
|
null=True)
|
||||||
|
|
||||||
changes = generic.GenericRelation(Change)
|
|
||||||
tags = PickledObjectField()
|
tags = PickledObjectField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
from greenmine.base.permissions import BaseDetailPermission
|
from greenmine.base.permissions import BaseDetailPermission
|
||||||
|
|
||||||
|
|
||||||
class ProjectDetailPermission(BaseDetailPermission):
|
class ProjectDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_project"
|
get_permission = "can_view_project"
|
||||||
put_permission = "change_project"
|
put_permission = "change_project"
|
||||||
|
@ -8,6 +9,7 @@ class ProjectDetailPermission(BaseDetailPermission):
|
||||||
safe_methods = ['HEAD', 'OPTIONS']
|
safe_methods = ['HEAD', 'OPTIONS']
|
||||||
path_to_project = []
|
path_to_project = []
|
||||||
|
|
||||||
|
|
||||||
class MilestoneDetailPermission(BaseDetailPermission):
|
class MilestoneDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_milestone"
|
get_permission = "can_view_milestone"
|
||||||
put_permission = "change_milestone"
|
put_permission = "change_milestone"
|
||||||
|
@ -16,6 +18,7 @@ class MilestoneDetailPermission(BaseDetailPermission):
|
||||||
safe_methods = ['HEAD', 'OPTIONS']
|
safe_methods = ['HEAD', 'OPTIONS']
|
||||||
path_to_project = ['project']
|
path_to_project = ['project']
|
||||||
|
|
||||||
|
|
||||||
class UserStoryDetailPermission(BaseDetailPermission):
|
class UserStoryDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_userstory"
|
get_permission = "can_view_userstory"
|
||||||
put_permission = "change_userstory"
|
put_permission = "change_userstory"
|
||||||
|
@ -24,6 +27,7 @@ class UserStoryDetailPermission(BaseDetailPermission):
|
||||||
safe_methods = ['HEAD', 'OPTIONS']
|
safe_methods = ['HEAD', 'OPTIONS']
|
||||||
path_to_project = ['project']
|
path_to_project = ['project']
|
||||||
|
|
||||||
|
|
||||||
class TaskDetailPermission(BaseDetailPermission):
|
class TaskDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_task"
|
get_permission = "can_view_task"
|
||||||
put_permission = "change_task"
|
put_permission = "change_task"
|
||||||
|
@ -32,6 +36,7 @@ class TaskDetailPermission(BaseDetailPermission):
|
||||||
safe_methods = ['HEAD', 'OPTIONS']
|
safe_methods = ['HEAD', 'OPTIONS']
|
||||||
path_to_project = ['project']
|
path_to_project = ['project']
|
||||||
|
|
||||||
|
|
||||||
class IssueDetailPermission(BaseDetailPermission):
|
class IssueDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_issue"
|
get_permission = "can_view_issue"
|
||||||
put_permission = "change_issue"
|
put_permission = "change_issue"
|
||||||
|
@ -40,15 +45,8 @@ class IssueDetailPermission(BaseDetailPermission):
|
||||||
safe_methods = ['HEAD', 'OPTIONS']
|
safe_methods = ['HEAD', 'OPTIONS']
|
||||||
path_to_project = ['project']
|
path_to_project = ['project']
|
||||||
|
|
||||||
class ChangeDetailPermission(BaseDetailPermission):
|
|
||||||
get_permission = "can_view_change"
|
|
||||||
put_permission = "change_change"
|
|
||||||
patch_permission = "change_change"
|
|
||||||
delete_permission = "can_delete_change"
|
|
||||||
safe_methods = ['HEAD', 'OPTIONS']
|
|
||||||
path_to_project = ['project']
|
|
||||||
|
|
||||||
class ChangeAttachmentDetailPermission(BaseDetailPermission):
|
class AttachmentDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_changeattachment"
|
get_permission = "can_view_changeattachment"
|
||||||
put_permission = "change_changeattachment"
|
put_permission = "change_changeattachment"
|
||||||
patch_permission = "change_changeattachment"
|
patch_permission = "change_changeattachment"
|
||||||
|
@ -56,6 +54,7 @@ class ChangeAttachmentDetailPermission(BaseDetailPermission):
|
||||||
safe_methods = ['HEAD', 'OPTIONS']
|
safe_methods = ['HEAD', 'OPTIONS']
|
||||||
path_to_project = ['change', 'project']
|
path_to_project = ['change', 'project']
|
||||||
|
|
||||||
|
|
||||||
class SeverityDetailPermission(BaseDetailPermission):
|
class SeverityDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_severity"
|
get_permission = "can_view_severity"
|
||||||
put_permission = "can_severity_severity"
|
put_permission = "can_severity_severity"
|
||||||
|
@ -64,6 +63,7 @@ class SeverityDetailPermission(BaseDetailPermission):
|
||||||
safe_methods = ['HEAD', 'OPTIONS']
|
safe_methods = ['HEAD', 'OPTIONS']
|
||||||
path_to_project = ['project']
|
path_to_project = ['project']
|
||||||
|
|
||||||
|
|
||||||
class IssueStatusDetailPermission(BaseDetailPermission):
|
class IssueStatusDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_issuestatus"
|
get_permission = "can_view_issuestatus"
|
||||||
put_permission = "can_severity_issuestatus"
|
put_permission = "can_severity_issuestatus"
|
||||||
|
@ -72,6 +72,7 @@ class IssueStatusDetailPermission(BaseDetailPermission):
|
||||||
safe_methods = ['HEAD', 'OPTIONS']
|
safe_methods = ['HEAD', 'OPTIONS']
|
||||||
path_to_project = ['project']
|
path_to_project = ['project']
|
||||||
|
|
||||||
|
|
||||||
class TaskStatusDetailPermission(BaseDetailPermission):
|
class TaskStatusDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_taskstatus"
|
get_permission = "can_view_taskstatus"
|
||||||
put_permission = "can_severity_taskstatus"
|
put_permission = "can_severity_taskstatus"
|
||||||
|
@ -80,6 +81,7 @@ class TaskStatusDetailPermission(BaseDetailPermission):
|
||||||
safe_methods = ['HEAD', 'OPTIONS']
|
safe_methods = ['HEAD', 'OPTIONS']
|
||||||
path_to_project = ['project']
|
path_to_project = ['project']
|
||||||
|
|
||||||
|
|
||||||
class UserStoryStatusDetailPermission(BaseDetailPermission):
|
class UserStoryStatusDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_userstorystatus"
|
get_permission = "can_view_userstorystatus"
|
||||||
put_permission = "can_severity_userstorystatus"
|
put_permission = "can_severity_userstorystatus"
|
||||||
|
@ -88,6 +90,7 @@ class UserStoryStatusDetailPermission(BaseDetailPermission):
|
||||||
safe_methods = ['HEAD', 'OPTIONS']
|
safe_methods = ['HEAD', 'OPTIONS']
|
||||||
path_to_project = ['project']
|
path_to_project = ['project']
|
||||||
|
|
||||||
|
|
||||||
class PriorityDetailPermission(BaseDetailPermission):
|
class PriorityDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_priority"
|
get_permission = "can_view_priority"
|
||||||
put_permission = "can_severity_priority"
|
put_permission = "can_severity_priority"
|
||||||
|
@ -96,6 +99,7 @@ class PriorityDetailPermission(BaseDetailPermission):
|
||||||
safe_methods = ['HEAD', 'OPTIONS']
|
safe_methods = ['HEAD', 'OPTIONS']
|
||||||
path_to_project = ['project']
|
path_to_project = ['project']
|
||||||
|
|
||||||
|
|
||||||
class IssueTypeDetailPermission(BaseDetailPermission):
|
class IssueTypeDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_issuetype"
|
get_permission = "can_view_issuetype"
|
||||||
put_permission = "can_severity_issuetype"
|
put_permission = "can_severity_issuetype"
|
||||||
|
@ -104,6 +108,7 @@ class IssueTypeDetailPermission(BaseDetailPermission):
|
||||||
safe_methods = ['HEAD', 'OPTIONS']
|
safe_methods = ['HEAD', 'OPTIONS']
|
||||||
path_to_project = ['project']
|
path_to_project = ['project']
|
||||||
|
|
||||||
|
|
||||||
class PointsDetailPermission(BaseDetailPermission):
|
class PointsDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_points"
|
get_permission = "can_view_points"
|
||||||
put_permission = "can_severity_points"
|
put_permission = "can_severity_points"
|
||||||
|
|
|
@ -48,19 +48,9 @@ class MilestoneSerializer(serializers.ModelSerializer):
|
||||||
fields = ()
|
fields = ()
|
||||||
|
|
||||||
|
|
||||||
class ChangeSerializer(serializers.ModelSerializer):
|
class AttachmentSerializer(serializers.ModelSerializer):
|
||||||
tags = PickleField()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Change
|
model = Attachment
|
||||||
fields = ()
|
|
||||||
|
|
||||||
|
|
||||||
class ChangeAttachmentSerializer(serializers.ModelSerializer):
|
|
||||||
tags = PickleField()
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = ChangeAttachment
|
|
||||||
fields = ()
|
fields = ()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,10 +10,8 @@ urlpatterns = format_suffix_patterns(patterns('',
|
||||||
url(r'^milestones/(?P<pk>[0-9]+)/$', api.MilestoneDetail.as_view(), name='milestone-detail'),
|
url(r'^milestones/(?P<pk>[0-9]+)/$', api.MilestoneDetail.as_view(), name='milestone-detail'),
|
||||||
url(r'^user_stories/$', api.UserStoryList.as_view(), name='user-story-list'),
|
url(r'^user_stories/$', api.UserStoryList.as_view(), name='user-story-list'),
|
||||||
url(r'^user_stories/(?P<pk>[0-9]+)/$', api.UserStoryDetail.as_view(), name='user-story-detail'),
|
url(r'^user_stories/(?P<pk>[0-9]+)/$', api.UserStoryDetail.as_view(), name='user-story-detail'),
|
||||||
url(r'^changes/$', api.ChangeList.as_view(), name='change-list'),
|
url(r'^attachments/$', api.AttachmentList.as_view(), name='attachment-list'),
|
||||||
url(r'^changes/(?P<pk>[0-9]+)/$', api.ChangeDetail.as_view(), name='change-detail'),
|
url(r'^attachments/(?P<pk>[0-9]+)/$', api.AttachmentDetail.as_view(), name='attachment-detail'),
|
||||||
url(r'^change_attachments/$', api.ChangeAttachmentList.as_view(), name='change-attachment-list'),
|
|
||||||
url(r'^change_attachments/(?P<pk>[0-9]+)/$', api.ChangeAttachmentDetail.as_view(), name='change-attachment-detail'),
|
|
||||||
url(r'^issues/$', api.IssueList.as_view(), name='issue-list'),
|
url(r'^issues/$', api.IssueList.as_view(), name='issue-list'),
|
||||||
url(r'^issues/(?P<pk>[0-9]+)/$', api.IssueDetail.as_view(), name='issue-detail'),
|
url(r'^issues/(?P<pk>[0-9]+)/$', api.IssueDetail.as_view(), name='issue-detail'),
|
||||||
url(r'^tasks/$', api.TaskList.as_view(), name='task-list'),
|
url(r'^tasks/$', api.TaskList.as_view(), name='task-list'),
|
||||||
|
|
Loading…
Reference in New Issue