Version 13 (modified by 19 years ago) ( diff ) | ,
---|
NewbieMistakes
Please feel free to share the things that tripped you up when you started with Django. We'll try to improve Django's error handling to catch such mistakes in the future.
POST to views loses POST data
Symptom
You are having a form that does a POST to some view and the view doesn't get the POST data from the form.
Probable cause
You might missing the / at the end of the form action. If that is the case, the CommonMiddleware redirects to the exact name of the view - and that allways includes a trailing /. Because it does so by using the standard HTTP redirection through Location header, it can't pass on the POST data - and that's why it gets lost.
Solution
Allways make sure that your form actions end with / like this:
<form action="/registration/login/" method="POST"> <input name="username"> <input name="password" type="password"> </form>
URLconf include() misbehaving
Symptom
You're trying to get your URLconf files to work, but getting cryptic errors about how there is no module 'index' (where 'index' is some function you are trying to assign as a view), or module 'foo' has no attribute 'urlpatterns'.
Probable cause
You may have tried to load your view files using include() in the URLconf file (in tutorial 3, this is myproject/settings/urls/main.py). The include() call assumes that the file it's loading is also a URLconf file.
Solution
Remove the include(). Just give the module and function name (e.g., 'myproject.apps.polls.views.polls.index'
) as a string, with no include() around it.
Blank object names
Symptom
The automatic admin interface is showing nothing (or a single
) in the "Select [object_type] to change" view.
Probable cause
You may have forgotten to create a __str__()
function for your model. Django calls __str__()
to find out how to display objects in the admin interface. An alternate cause is the string you return from __str__()
includes brackets (an therefore looks like an html tag), and is cleaned up by the strip_tags
template filter, resulting in blank entries.
Solution
Add a correct __str__()
function (without brackets in the output) to all your models. Make it a habit so it becomes automatic.
Integer & NULLS
Problem
When you have a Field: current_zip = meta.IntegerField(maxlength=5,blank=True)
django will create a not nullable field in the DB. However leaving the field blank (in admin/web) django will try and insert a NULL value in the DB.
Solution
Add null=True:
current_zip = meta.IntegerField(maxlength=5,null=True,blank=True)
Appending to a list in session doesn't work
Problem
If you have a list in your session, append operations don't get saved to the object.
Solution
Copy the list out of the session object, append to it, then copy it back in:
sessionlist = request.session['my_list'] sessionlist.append(new_object) request.session['my_list'] = sessionlist
Errors about undefined attributes with one-char names
Problem
You get an AttributeError with some weird attribute name that's only one char long. You don't have that attribute name anywhere in your code.
Solution
Search your model and code for situations where you have to pass a tuple of values and want to pass a tuple with one element - and that element is a string like in this sample:
class META: ... admin = meta.Admin( list_display = ('total_price'), ... )
It's a standard python error - you are just missing a comma in the list_display assignement like this:
class META: ... admin = meta.Admin( list_display = ('total_price',), ... )
Since a tuple is expected but a string provided, the code will merrily iterate over the characters of the string instead of the tuple elements - and that's where the single-char attribute names come from.