Easy inline editing outside the admin

115 views
Skip to first unread message

Robert Wittams

unread,
Sep 23, 2005, 2:54:30 PM9/23/05
to django-d...@googlegroups.com
In my hackathon ticket here: http://code.djangoproject.com/ticket/535,
I have been refactoring the admin hacks into the metasystem proper.

My latest patch ( django-admin-refactor-4.patch ) enables easy inline
editing outside the admin with no messing about in view functions.

Here is an example, which works well with the above patch.
:

Subset of my model:

class Workout(meta.Model):
user = meta.ForeignKey(auth.User)
start_time = meta.DateTimeField()
length = meta.IntegerField()
class META:
admin = meta.Admin()
ordering = ('-user', 'start_time')


class Set(meta.Model):
workout = meta.ForeignKey(Workout, edit_inline=meta.TABULAR)
exercise = meta.ForeignKey(Exercise, core=True)
spotter = meta.ForeignKey(auth.User, null=True, blank=True)
load = meta.FloatField(max_digits=4,decimal_places=1)
reps = meta.PositiveIntegerField(core=True)
sequence = meta.IntegerField(null=True, blank=True)

class META:
ordering=('sequence',)


View function:

def workout_edit_inline(request, object_id):
try:
workout = workouts.get_object(id__exact=object_id)
except workouts.WorkoutDoesNotExist:
raise Http404

manipulator = workouts.ChangeManipulator(workout.id)

if request.POST:
new_data = request.POST.copy()
errors = manipulator.get_validation_errors(new_data)
if not errors:
manipulator.do_html2python(new_data)
manipulator.save(new_data)
return HttpResponseRedirect("/workouts/%s/edit_inline/" %
object_id)
else:
errors = {}
# ********** Heres the new bit *********************
new_data = manipulator.flatten_data()

form = formfields.FormWrapper(manipulator, new_data, errors,
edit_inline=True) # <----- extra arg
t = template_loader.get_template('tracker/workout_edit_inline')
c = Context(request, {
'form' : form,
'workout': workout
})
return HttpResponse(t.render(c))


Template with error handling removed for clarity:
{% extends "base" %}


{% block title %}
{{ workout }}
{% endblock %}


{% block content %}


<div class="workout" id="workout-{{object.id}}">

<form method="post" action="">
<p><label>User: {{ form.user }} </label> </p>
<p>Start:
<p><label>Date: {{ form.start_time_date }} </label> <p>
<p><label>Time: {{ form.start_time_time }} </label> </p>
</p>
<p><label>Length: {{ form.length }} minutes </label> </p>
{% for set in form.sets %}
<hr />
<div>
<h3> Set #{{ forloop.counter}} </h3>
{{set.id }}
<p> <label> Exercise: {{ set.exercise }} </label></p>
<p> <label> Spotter: {{ set.spotter}}</label> </p>
<p> <label> Load: {{ set.load}} </label> </p>
<p> <label> Reps: {{ set.reps }} </label> </p>
<p> <label> Sequence: {{ set.sequence }} </label> </p>
</div>
{% endfor %}

<input type="submit">
</form>


</div>
{% endblock %}


Reply all
Reply to author
Forward
0 new messages