def edit_ticket(request, ticket_id=None, project=None, template='ponymine/edit_ticket.html', redirect_url=None, form_class=TicketForm): """ Creates or modifies a ticket """ data = {} # get the ticket if ticket_id: ticket = get_object_or_404(Ticket, pk=ticket_id) project = ticket.project else: ticket = Ticket(project=project) data['ticket'] = ticket utils.check_membership(project, request.user) if request.method == "POST": form = form_class(request.POST, instance=ticket) if form.is_valid(): # copy the existing ticket so we can make the change log old_ticket = copy.copy(ticket) # create or update the ticket new_ticket = form.save(commit=False) if not new_ticket.id: new_ticket.reported_by = request.user new_ticket.project = project new_ticket.save() # log any differences between the tickets utils.create_change_logs(request, old_ticket, new_ticket, form.cleaned_data.get('notes', '')) # determine where the user should go after saving the ticket if not redirect_url: redirect_url = new_ticket.get_absolute_url() return HttpResponseRedirect(redirect_url) else: # set the ticket's status based on the query string status_id = request.GET.get('status', None) if status_id: ticket.status = Status.objects.get(pk=int(status_id)) form = form_class(instance=ticket) # limit which users can be assigned a ticket project_member_ids = [u.id for u in project.members.all()] members = User.objects.filter(pk__in=project_member_ids) form.limit_assignable_users(members) data['title'] = ticket.id and _('Update Ticket') or _('New Ticket') data['form'] = form data['project'] = project return render(template, data, context_instance=RequestContext(request))
from django.db import models from ponymine.models import Project, Ticket class Milestone(models.Model): project = models.ForeignKey(Project) name = models.CharField(max_length=75) due_date = models.DateField(blank=True, null=True) description = models.TextField() is_complete = models.BooleanField(default=False, blank=True) class Meta: ordering = ('-due_date', 'name') if not getattr(Ticket, 'milestone', None): # Add a milestone column to our Ticket class if it hasn't been added yet Ticket.add_to_class('milestone', models.ForeignKey(Milestone, blank=True, null=True))