예제 #1
0
def evalution_edit(request, action_pk, evaluation_pk=None):
    action = get_object_or_404(Action, pk=action_pk, user=request.user)
    # if this has an evaluation, forward to the
    try:
        if action.evaluation and evaluation_pk == None:
            return HttpResponseRedirect(reverse('journals:actions_evaluation_edit', args=[action.pk, action.evaluation.pk]))
    except Evaluation.DoesNotExist:
        pass
    
    # instance or not
    if evaluation_pk is not None:
        evaluation = get_object_or_404(Evaluation, pk=evaluation_pk)
    else:
        evaluation = None
    # formsets
    ImageFormSet = inlineformset_factory(Evaluation, EvaluationImage, form=EvaluationImageForm, extra=3)
    AttachmentFormSet = inlineformset_factory(Evaluation, EvaluationAttachment, form=EvaluationAttachmentForm, extra=3)
    
    if request.method == 'POST':
        form = EvaluationForm(request.POST, instance=evaluation)
        image_formset = ImageFormSet(request.POST, request.FILES, instance = evaluation)
        attachment_formset = AttachmentFormSet(request.POST, request.FILES, instance = evaluation)
        if form.is_valid() and image_formset.is_valid() and attachment_formset.is_valid():
            evaluation = form.save(commit=False)
            evaluation.user = request.user
            evaluation.action = action
            evaluation.save()
            form.save_m2m()
            # if instance was none, make the formsets again with new instance
            if evaluation_pk is None:
                image_formset = ImageFormSet(request.POST, request.FILES, instance=evaluation)
                attachment_formset = AttachmentFormSet(request.POST, request.FILES, instance=evaluation)
            # make the action completed
            action.status = action.COMPLETED
            action.save()
            # now save them out
            images = image_formset.save()
            attachments = attachment_formset.save()
            # add a message
            messages.success(request, 'Evaluation Saved')
            # return a redirect
            return HttpResponseRedirect(reverse('journals:actions_evaluation', args=[request.user.pk, action.pk, evaluation.pk ]))
        
    if request.method == 'GET':
        form = EvaluationForm(instance=evaluation)
        image_formset = ImageFormSet(instance = evaluation)
        attachment_formset = AttachmentFormSet(instance = evaluation)
    
    return render_to_response('journals/evalution_edit.html', RequestContext(request,{
        'form' : form,
        'image_formset' : image_formset,
        'attachment_formset' : attachment_formset,
        'evaluation' : evaluation,
        'action': action,
    }))