Thanks for great feedback, Euan. I've added some comments below.

On Jul 3, 8:26 am, "[email protected]"
<[email protected]> wrote:
> I had a look over your tutorial and it looks pretty sweet. Definitely
> gets down into explaining how to use the admin interface and taught me
> things I hadn't realized. I have a few suggestions for you (feel free
> to ignore :)):
>
> 1) I'm not sure how good an idea it is to call the attribute on your
> DateTime model "datetime" - it conflicts with the datetime module.
> Although this shouldn't cause any problems, it might be confusing.

Hm, maybe calling it 'created' is better.. but then you'll have
created.created which also doesn't look that great. I generally avoid
using names like list, tuple because they're built-ins and also
because they get highlighted in Vim :). Haven't really thought about
using module names.. In fact I don't think I ever ran into this
before. I'll have to think about this!

>
> 2) In the "Changing Save Redirect" section you import a load of stuff
> inside an instance method. I'd prefer to see this imported at module
> level.

I agree, that's what I do when I do actual development; but in this
case I made an exception to keep the tutorial shorter. Generally my
idea for this set of tutorials is to err on the side of maintaining
momentum rather than doing things by the book, I'll expand on this
idea more below.

> 3) In the same section, you do request.POST.has_key. I believe the
> preferred syntax is "name_of_key" in request.POST.

That's straight from Django sources :).

> 4) In the same section you are using hard-coded URLs - can you not get
> these by using reverse() ? It might not be possible as I know the

I want to introduce reverse() a bit later, in a larger tutorial where
it will be more self-evidently useful. So, the goal is to have someone
who's not a programmer go through the tutorial and feel that a useful
and practical app was done with very little code and only explain
enough concepts that are necessary for that particular app. Then, over
the course of the whole set of tutorials, various concepts will be
introduced at the exact point when they'd be most useful.

On the other hand, I haven't actually used reverse() myself. I know
that it can get a little tricky. I'll definitely try to see if it
makes sense to introduce it in the view function.

> admin is quite a beast.
> 5) In the mark_done method on Item, you could definitely use reverse
> and that should aid any changes to your URL structure.
> 6) In the "Customizing DateTime" your unicode method returns a str not
> unicode

Good point - will fix that.

> 7) In the same section you talk about an OnOff property. I think you
> actually mean attribute (although in terms of the concept it is indeed
> a property, just in terms of the model it is an attribute)

Yes, that's where I have to balance use of language that sounds
clearer vs. fine points of terminology. I feel that most programming
tutorials are too quick to emphasize correct terminology, but I
definitely get where that comes from, too..

> 8) In the "Adding users" section, I think you could replace the loop
> with:
>
> Item.objects.filter(created=obj,
> user_isnull=True).update(user=request.user).

Good, this is actually new to me. I'll keep it in mind but I think for
the first tutorial the loop is clearer and this is something that
should be introduced when performance gain will be more apparent.

>
> This would use only one SQL UPDATE and not n SELECTs and n UPDATEs.
>
> 9) At the end when the possible actions are checked it might be nice
> to raise an exception if you don't find a valid action.

Here, in fact, I'm following Django tutorial where they at one point
rely on the regex in urls.py and then explain that they're not
validating because it would not get through the regex if it were
wrong. On the other hand, depending on the project, I might raise an
exception if I feel that an error in the regex might be hard to debug
otherwise.

>
> I hope you find the above helpful. There's very little wrong with the
> tutorial and it's really clear, but I think at least some of the
> points might be well incorporated.

Very helpful - even if I didn't follow all of the advice, just
thinking and going through the reasons was extremely valuable. I
really appreciated the detailed critique, and I'd be very thankful if
you also looked at my future tutorials I'll also post here. -ak

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to