From dda940563123325ff2bf949cfa2bf7bcc8f02091 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Sat, 20 Feb 2010 13:54:58 -0500 Subject: Adding story view --- snakeplan/data.json | 1 + snakeplan/projects/models.py | 8 +-- snakeplan/projects/templates/iteration_list.html | 21 +++----- .../templates/iterations/iteration_list.html | 9 ++++ .../projects/templates/projects/project_list.html | 7 +++ .../projects/templates/stories/story_list.html | 0 snakeplan/projects/urls.py | 3 +- snakeplan/projects/views/iterations.py | 12 ++--- snakeplan/projects/views/projects.py | 10 ++++ snakeplan/projects/views/stories.py | 11 ++-- snakeplan/readme_urls.txt | 42 +++++++++++++++ snakeplan/snakeplan.db | Bin 86016 -> 83968 bytes snakeplan/urls.py | 57 ++------------------- 13 files changed, 100 insertions(+), 81 deletions(-) create mode 100644 snakeplan/data.json create mode 100644 snakeplan/projects/templates/iterations/iteration_list.html create mode 100644 snakeplan/projects/templates/projects/project_list.html create mode 100644 snakeplan/projects/templates/stories/story_list.html create mode 100644 snakeplan/projects/views/projects.py create mode 100644 snakeplan/readme_urls.txt diff --git a/snakeplan/data.json b/snakeplan/data.json new file mode 100644 index 0000000..89b1e1d --- /dev/null +++ b/snakeplan/data.json @@ -0,0 +1 @@ +[{"pk": 22, "model": "auth.permission", "fields": {"codename": "add_logentry", "name": "Can add log entry", "content_type": 8}}, {"pk": 23, "model": "auth.permission", "fields": {"codename": "change_logentry", "name": "Can change log entry", "content_type": 8}}, {"pk": 24, "model": "auth.permission", "fields": {"codename": "delete_logentry", "name": "Can delete log entry", "content_type": 8}}, {"pk": 4, "model": "auth.permission", "fields": {"codename": "add_group", "name": "Can add group", "content_type": 2}}, {"pk": 10, "model": "auth.permission", "fields": {"codename": "add_message", "name": "Can add message", "content_type": 4}}, {"pk": 1, "model": "auth.permission", "fields": {"codename": "add_permission", "name": "Can add permission", "content_type": 1}}, {"pk": 7, "model": "auth.permission", "fields": {"codename": "add_user", "name": "Can add user", "content_type": 3}}, {"pk": 5, "model": "auth.permission", "fields": {"codename": "change_group", "name": "Can change group", "content_type": 2}}, {"pk": 11, "model": "auth.permission", "fields": {"codename": "change_message", "name": "Can change message", "content_type": 4}}, {"pk": 2, "model": "auth.permission", "fields": {"codename": "change_permission", "name": "Can change permission", "content_type": 1}}, {"pk": 8, "model": "auth.permission", "fields": {"codename": "change_user", "name": "Can change user", "content_type": 3}}, {"pk": 6, "model": "auth.permission", "fields": {"codename": "delete_group", "name": "Can delete group", "content_type": 2}}, {"pk": 12, "model": "auth.permission", "fields": {"codename": "delete_message", "name": "Can delete message", "content_type": 4}}, {"pk": 3, "model": "auth.permission", "fields": {"codename": "delete_permission", "name": "Can delete permission", "content_type": 1}}, {"pk": 9, "model": "auth.permission", "fields": {"codename": "delete_user", "name": "Can delete user", "content_type": 3}}, {"pk": 13, "model": "auth.permission", "fields": {"codename": "add_contenttype", "name": "Can add content type", "content_type": 5}}, {"pk": 14, "model": "auth.permission", "fields": {"codename": "change_contenttype", "name": "Can change content type", "content_type": 5}}, {"pk": 15, "model": "auth.permission", "fields": {"codename": "delete_contenttype", "name": "Can delete content type", "content_type": 5}}, {"pk": 28, "model": "auth.permission", "fields": {"codename": "add_iteration", "name": "Can add iteration", "content_type": 10}}, {"pk": 37, "model": "auth.permission", "fields": {"codename": "add_loggedtime", "name": "Can add logged time", "content_type": 13}}, {"pk": 25, "model": "auth.permission", "fields": {"codename": "add_project", "name": "Can add project", "content_type": 9}}, {"pk": 31, "model": "auth.permission", "fields": {"codename": "add_story", "name": "Can add story", "content_type": 11}}, {"pk": 34, "model": "auth.permission", "fields": {"codename": "add_task", "name": "Can add task", "content_type": 12}}, {"pk": 29, "model": "auth.permission", "fields": {"codename": "change_iteration", "name": "Can change iteration", "content_type": 10}}, {"pk": 38, "model": "auth.permission", "fields": {"codename": "change_loggedtime", "name": "Can change logged time", "content_type": 13}}, {"pk": 26, "model": "auth.permission", "fields": {"codename": "change_project", "name": "Can change project", "content_type": 9}}, {"pk": 32, "model": "auth.permission", "fields": {"codename": "change_story", "name": "Can change story", "content_type": 11}}, {"pk": 35, "model": "auth.permission", "fields": {"codename": "change_task", "name": "Can change task", "content_type": 12}}, {"pk": 30, "model": "auth.permission", "fields": {"codename": "delete_iteration", "name": "Can delete iteration", "content_type": 10}}, {"pk": 39, "model": "auth.permission", "fields": {"codename": "delete_loggedtime", "name": "Can delete logged time", "content_type": 13}}, {"pk": 27, "model": "auth.permission", "fields": {"codename": "delete_project", "name": "Can delete project", "content_type": 9}}, {"pk": 33, "model": "auth.permission", "fields": {"codename": "delete_story", "name": "Can delete story", "content_type": 11}}, {"pk": 36, "model": "auth.permission", "fields": {"codename": "delete_task", "name": "Can delete task", "content_type": 12}}, {"pk": 16, "model": "auth.permission", "fields": {"codename": "add_session", "name": "Can add session", "content_type": 6}}, {"pk": 17, "model": "auth.permission", "fields": {"codename": "change_session", "name": "Can change session", "content_type": 6}}, {"pk": 18, "model": "auth.permission", "fields": {"codename": "delete_session", "name": "Can delete session", "content_type": 6}}, {"pk": 19, "model": "auth.permission", "fields": {"codename": "add_site", "name": "Can add site", "content_type": 7}}, {"pk": 20, "model": "auth.permission", "fields": {"codename": "change_site", "name": "Can change site", "content_type": 7}}, {"pk": 21, "model": "auth.permission", "fields": {"codename": "delete_site", "name": "Can delete site", "content_type": 7}}, {"pk": 1, "model": "auth.user", "fields": {"username": "root", "first_name": "", "last_name": "", "is_active": true, "is_superuser": true, "is_staff": true, "last_login": "2010-02-20 11:18:45", "groups": [], "user_permissions": [], "password": "sha1$f2493$0f7b2e4387894d47810c9c885d9efc9b9043a6c7", "email": "root@example.com", "date_joined": "2010-02-20 11:18:22"}}, {"pk": 5, "model": "contenttypes.contenttype", "fields": {"model": "contenttype", "name": "content type", "app_label": "contenttypes"}}, {"pk": 2, "model": "contenttypes.contenttype", "fields": {"model": "group", "name": "group", "app_label": "auth"}}, {"pk": 10, "model": "contenttypes.contenttype", "fields": {"model": "iteration", "name": "iteration", "app_label": "projects"}}, {"pk": 8, "model": "contenttypes.contenttype", "fields": {"model": "logentry", "name": "log entry", "app_label": "admin"}}, {"pk": 13, "model": "contenttypes.contenttype", "fields": {"model": "loggedtime", "name": "logged time", "app_label": "projects"}}, {"pk": 4, "model": "contenttypes.contenttype", "fields": {"model": "message", "name": "message", "app_label": "auth"}}, {"pk": 1, "model": "contenttypes.contenttype", "fields": {"model": "permission", "name": "permission", "app_label": "auth"}}, {"pk": 9, "model": "contenttypes.contenttype", "fields": {"model": "project", "name": "project", "app_label": "projects"}}, {"pk": 6, "model": "contenttypes.contenttype", "fields": {"model": "session", "name": "session", "app_label": "sessions"}}, {"pk": 7, "model": "contenttypes.contenttype", "fields": {"model": "site", "name": "site", "app_label": "sites"}}, {"pk": 11, "model": "contenttypes.contenttype", "fields": {"model": "story", "name": "story", "app_label": "projects"}}, {"pk": 12, "model": "contenttypes.contenttype", "fields": {"model": "task", "name": "task", "app_label": "projects"}}, {"pk": 3, "model": "contenttypes.contenttype", "fields": {"model": "user", "name": "user", "app_label": "auth"}}, {"pk": "8b4e9c8d3c261624901394dd2613bde4", "model": "sessions.session", "fields": {"expire_date": "2010-03-06 11:18:45", "session_data": "gAJ9cQEoVRJfYXV0aF91c2VyX2JhY2tlbmRxAlUpZGphbmdvLmNvbnRyaWIuYXV0aC5iYWNrZW5k\ncy5Nb2RlbEJhY2tlbmRxA1UNX2F1dGhfdXNlcl9pZHEESwF1LjZjMTMyZDUxODcwZTdhZGExZTM4\nNTE0YWY1OWI0MmI4\n"}}, {"pk": 1, "model": "sites.site", "fields": {"domain": "example.com", "name": "example.com"}}, {"pk": 3, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-02-20 11:21:35", "object_repr": "Release 0.1", "object_id": "2", "change_message": "", "user": 1, "content_type": 10}}, {"pk": 2, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-02-20 11:21:09", "object_repr": "Backlog", "object_id": "1", "change_message": "", "user": 1, "content_type": 10}}, {"pk": 1, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-02-20 11:20:47", "object_repr": "Snakeplan", "object_id": "1", "change_message": "", "user": 1, "content_type": 9}}, {"pk": 1, "model": "projects.project", "fields": {"active": true, "hidden": false, "name": "Snakeplan", "wiki_link": "", "description": "Development of snakeplan."}}, {"pk": 1, "model": "projects.iteration", "fields": {"status": 0, "name": "Backlog", "end_date": "2025-02-20", "project": 1, "days_worked": "0", "start_date": "2010-02-20", "description": ""}}, {"pk": 2, "model": "projects.iteration", "fields": {"status": 0, "name": "Release 0.1", "end_date": "2010-03-20", "project": 1, "days_worked": "0", "start_date": "2010-02-20", "description": ""}}] diff --git a/snakeplan/projects/models.py b/snakeplan/projects/models.py index b91ec7c..857403e 100755 --- a/snakeplan/projects/models.py +++ b/snakeplan/projects/models.py @@ -53,11 +53,11 @@ class Iteration(Model): class Story(Model): name = m.CharField(max_length=200) - project = m.ForeignKey(Project) - iteration = m.ForeignKey(Iteration, blank=True) + iteration = m.ForeignKey(Iteration) disposition = m.IntegerField(choices=DISPOSITIONS) - customer = m.ForeignKey(User, blank=True, related_name='story_customer') - tracker = m.ForeignKey(User, blank=True) + customer = m.ForeignKey(User, blank=True, null=True, + related_name='story_customer') + tracker = m.ForeignKey(User, blank=True, null=True) status = m.IntegerField(choices=STATUSES, default=0) priority = m.IntegerField() order = m.IntegerField() diff --git a/snakeplan/projects/templates/iteration_list.html b/snakeplan/projects/templates/iteration_list.html index 55bad08..4b92f71 100644 --- a/snakeplan/projects/templates/iteration_list.html +++ b/snakeplan/projects/templates/iteration_list.html @@ -1,18 +1,9 @@ -

{{project_name}}

+

Project: {{project_name}}

- -{% for item in iteration_list %} -
- -
+

Iterations

+ - - + diff --git a/snakeplan/projects/templates/iterations/iteration_list.html b/snakeplan/projects/templates/iterations/iteration_list.html new file mode 100644 index 0000000..4b92f71 --- /dev/null +++ b/snakeplan/projects/templates/iterations/iteration_list.html @@ -0,0 +1,9 @@ +

Project: {{project_name}}

+ +

Iterations

+ + diff --git a/snakeplan/projects/templates/projects/project_list.html b/snakeplan/projects/templates/projects/project_list.html new file mode 100644 index 0000000..5ede56e --- /dev/null +++ b/snakeplan/projects/templates/projects/project_list.html @@ -0,0 +1,7 @@ +

Projects

+ +
    + {% for project in object_list %} +
  1. {{project.name}}
  2. + {% endfor %} +
diff --git a/snakeplan/projects/templates/stories/story_list.html b/snakeplan/projects/templates/stories/story_list.html new file mode 100644 index 0000000..e69de29 diff --git a/snakeplan/projects/urls.py b/snakeplan/projects/urls.py index 2b41a8c..703af8f 100644 --- a/snakeplan/projects/urls.py +++ b/snakeplan/projects/urls.py @@ -2,6 +2,7 @@ from django.conf.urls.defaults import patterns urlpatterns = patterns('snakeplan.projects.views', - ('^(.*)/', 'iterations.iteration_list'), + (r'^$', 'projects.index'), (r'^story/(.*)/', 'stories.index'), + (r'^(.*)/', 'iterations.iteration_list'), ) diff --git a/snakeplan/projects/views/iterations.py b/snakeplan/projects/views/iterations.py index 327de82..d44fec5 100644 --- a/snakeplan/projects/views/iterations.py +++ b/snakeplan/projects/views/iterations.py @@ -1,11 +1,11 @@ from django.shortcuts import render_to_response -from projects.models import Project, Iteration +from snakeplan.projects.models import Project, Iteration def iteration_list(request, project_id): - project = Project.objects.filter(id = project_id) - iteration_list = Iteration.objects.filter(project = project_id) + iterations = Iteration.objects.filter(project=project_id) + project = iterations[0].project - return render_to_response("iteration_list.html", - {"project_name" : project[0].name, - "iteration_list" : iteration_list + return render_to_response("iterations/iteration_list.html", + {"project_name" : project.name, + "iterations" : iterations, }) diff --git a/snakeplan/projects/views/projects.py b/snakeplan/projects/views/projects.py new file mode 100644 index 0000000..288083e --- /dev/null +++ b/snakeplan/projects/views/projects.py @@ -0,0 +1,10 @@ +from django.views.generic import list_detail +from snakeplan.projects.models import Project + + +def index(request): + return list_detail.object_list( + request=request, + queryset=Project.objects.all(), + allow_empty=True + ) diff --git a/snakeplan/projects/views/stories.py b/snakeplan/projects/views/stories.py index ce59b1e..f87bb2b 100644 --- a/snakeplan/projects/views/stories.py +++ b/snakeplan/projects/views/stories.py @@ -1,5 +1,10 @@ -from django.http import HttpResponse +from django.views.generic import list_detail +from snakeplan.projects.models import Iteration -def index(request): - return HttpResponse('Index') +def index(request, project_id): + return list_detail.object_list( + request=request, + queryset=Iteration.objects.filter(project=project_id).all(), + allow_empty=True + ) diff --git a/snakeplan/readme_urls.txt b/snakeplan/readme_urls.txt new file mode 100644 index 0000000..6a12fc1 --- /dev/null +++ b/snakeplan/readme_urls.txt @@ -0,0 +1,42 @@ +====== ======================== ======================================== +Method URL What it does +====== ======================== ======================================== +GET /modelname/ Lists model instances, using filters + like ?key=value1&key=value2 + +GET /modelname/search displays a search form + +GET /modelname/id displays a readonly instance + +GET /modelname/edit/id displays an edit form + +POST /modelname/update/id updates an instance and redirects + +POST /modelname/upsert Updates or inserts an instance and + redirects + +GET /modelname/upsert Draws a form to do an upsert. + +GET /modelname/upsertform Draws a form to do an upsert. + +GET /modelname/create displays an insert form + +GET /modelname/insertform displays an insert form + +GET /modelname/remove/id displays a form that posts to + /model/delete/id + +POST /modelname/insert inserts a new record and redirects + +POST /modelname/delete/id deletes a record and redirects + +GET /modelname/bulk/edit display a bulk edit ui + +POST /modelname/bulk/update performs a bulk update and redirect + +GET /modelname/bulk/create display a bulk insert form + +POST /modelname/bulk/insert performs a bulk insert and redirect + +POST /modelname/bulk/delete performs a bulk delete and redirect +====== ======================== ======================================== diff --git a/snakeplan/snakeplan.db b/snakeplan/snakeplan.db index a572f4b..e06dc67 100644 Binary files a/snakeplan/snakeplan.db and b/snakeplan/snakeplan.db differ diff --git a/snakeplan/urls.py b/snakeplan/urls.py index 8a469b2..591c69f 100755 --- a/snakeplan/urls.py +++ b/snakeplan/urls.py @@ -1,60 +1,13 @@ -from django.contrib import admin from django.conf.urls.defaults import patterns, include +from django.contrib import admin +admin.autodiscover() + # Just get the admin stuff, don't actually do anything with it from snakeplan.projects import admin as snakeplan_admin -admin.autodiscover() - - urlpatterns = patterns('', - (r'^admin/', include(admin.site.urls)), - (r'^projects/', include('snakeplan.projects.urls')), + (r'^admin/', include('django.contrib.admin.site.urls')), + (r'^project/', include('snakeplan.projects.urls')), ) - - -""" -====== ======================== ======================================== -Method URL What it does -====== ======================== ======================================== -GET /modelname/ Lists model instances, using filters - like ?key=value1&key=value2 - -GET /modelname/search displays a search form - -GET /modelname/id displays a readonly instance - -GET /modelname/edit/id displays an edit form - -POST /modelname/update/id updates an instance and redirects - -POST /modelname/upsert Updates or inserts an instance and - redirects - -GET /modelname/upsert Draws a form to do an upsert. - -GET /modelname/upsertform Draws a form to do an upsert. - -GET /modelname/create displays an insert form - -GET /modelname/insertform displays an insert form - -GET /modelname/remove/id displays a form that posts to - /model/delete/id - -POST /modelname/insert inserts a new record and redirects - -POST /modelname/delete/id deletes a record and redirects - -GET /modelname/bulk/edit display a bulk edit ui - -POST /modelname/bulk/update performs a bulk update and redirect - -GET /modelname/bulk/create display a bulk insert form - -POST /modelname/bulk/insert performs a bulk insert and redirect - -POST /modelname/bulk/delete performs a bulk delete and redirect -====== ======================== ======================================== -""" -- cgit v1.2.3