diff options
| author | Jason Pellerin <jpellerin@gmail.com> | 2006-11-29 20:16:50 +0000 |
|---|---|---|
| committer | Jason Pellerin <jpellerin@gmail.com> | 2006-11-29 20:16:50 +0000 |
| commit | f8217026f9618adb65ab2d517025e87b98ed2fbe (patch) | |
| tree | 2ab846582343dc9b0894b0bdffa3fe04f590365b /django | |
| parent | 9a01534370a272e59f2bb64251d1f46218a32516 (diff) | |
[multi-db] Merge trunk to [3850]. Some tests still failing.
git-svn-id: http://code.djangoproject.com/svn/django/branches/multiple-db-support@4142 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
| -rw-r--r-- | django/conf/global_settings.py | 4 | ||||
| -rw-r--r-- | django/conf/locale/de/LC_MESSAGES/django.mo | bin | 37271 -> 37729 bytes | |||
| -rw-r--r-- | django/conf/locale/de/LC_MESSAGES/django.po | 49 | ||||
| -rw-r--r-- | django/conf/locale/zh_CN/LC_MESSAGES/django.mo | bin | 30798 -> 30798 bytes | |||
| -rw-r--r-- | django/conf/locale/zh_CN/LC_MESSAGES/django.po | 4 | ||||
| -rw-r--r-- | django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo | bin | 1513 -> 1505 bytes | |||
| -rw-r--r-- | django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po | 28 | ||||
| -rw-r--r-- | django/contrib/auth/decorators.py | 4 | ||||
| -rw-r--r-- | django/contrib/auth/forms.py | 11 | ||||
| -rw-r--r-- | django/core/management.py | 2 | ||||
| -rw-r--r-- | django/core/servers/basehttp.py | 2 | ||||
| -rw-r--r-- | django/core/validators.py | 4 | ||||
| -rw-r--r-- | django/db/backends/ansi/sql.py | 2 | ||||
| -rw-r--r-- | django/db/models/fields/__init__.py | 4 | ||||
| -rw-r--r-- | django/db/models/fields/related.py | 2 | ||||
| -rw-r--r-- | django/db/models/manipulators.py | 4 | ||||
| -rw-r--r-- | django/db/models/query.py | 14 | ||||
| -rw-r--r-- | django/forms/__init__.py | 3 | ||||
| -rw-r--r-- | django/middleware/common.py | 4 | ||||
| -rw-r--r-- | django/views/generic/create_update.py | 6 |
20 files changed, 85 insertions, 62 deletions
diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py index 920ff9657c..cc168034ce 100644 --- a/django/conf/global_settings.py +++ b/django/conf/global_settings.py @@ -277,8 +277,8 @@ CACHE_MIDDLEWARE_KEY_PREFIX = '' COMMENTS_ALLOW_PROFANITIES = False # The profanities that will trigger a validation error in the -# 'hasNoProfanities' validator. All of these should be in lower-case. -PROFANITIES_LIST = ['asshat', 'asshead', 'asshole', 'cunt', 'fuck', 'gook', 'nigger', 'shit'] +# 'hasNoProfanities' validator. All of these should be in lowercase. +PROFANITIES_LIST = ('asshat', 'asshead', 'asshole', 'cunt', 'fuck', 'gook', 'nigger', 'shit') # The group ID that designates which users are banned. # Set to None if you're not using it. diff --git a/django/conf/locale/de/LC_MESSAGES/django.mo b/django/conf/locale/de/LC_MESSAGES/django.mo Binary files differindex 768c859ad2..aef68099d3 100644 --- a/django/conf/locale/de/LC_MESSAGES/django.mo +++ b/django/conf/locale/de/LC_MESSAGES/django.mo diff --git a/django/conf/locale/de/LC_MESSAGES/django.po b/django/conf/locale/de/LC_MESSAGES/django.po index 2da39e2253..614ea69247 100644 --- a/django/conf/locale/de/LC_MESSAGES/django.po +++ b/django/conf/locale/de/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Django 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-09-25 15:39+0200\n" +"POT-Creation-Date: 2006-09-25 16:04+0200\n" "PO-Revision-Date: 2005-10-08 00:03+0200\n" "Last-Translator: Georg Bauer <gb@bofh.ms>\n" "MIME-Version: 1.0\n" @@ -586,6 +586,7 @@ msgid "view:" msgstr "Ansicht:" #: contrib/admin/views/doc.py:164 +#, python-format msgid "App %r not found" msgstr "Anwendung %r nicht gefunden" @@ -826,6 +827,7 @@ msgid "Models available in the %(name)s application." msgstr "Modelle, die in der Anwendung %(name)s vorhanden sind." #: contrib/admin/templates/admin/index.html:18 +#, python-format msgid "%(name)s" msgstr "%(name)s" @@ -873,6 +875,7 @@ msgid "Delete" msgstr "Lschen" #: contrib/admin/templates/admin/delete_confirmation.html:14 +#, python-format msgid "" "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " "related objects, but your account doesn't have permission to delete the " @@ -883,18 +886,20 @@ msgstr "" "folgenden abhngigen Daten zu lschen:" #: contrib/admin/templates/admin/delete_confirmation.html:21 +#, python-format msgid "" "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " "All of the following related items will be deleted:" msgstr "" -"Sind Sie sicher, das Sie %(object_name)s \"%(escaped_object)s\" lschen wollen? Es " -"werden zustzlich die folgenden abhngigen Daten mit gelscht:" +"Sind Sie sicher, das Sie %(object_name)s \"%(escaped_object)s\" lschen " +"wollen? Es werden zustzlich die folgenden abhngigen Daten mit gelscht:" #: contrib/admin/templates/admin/delete_confirmation.html:26 msgid "Yes, I'm sure" msgstr "Ja, ich bin sicher" #: contrib/admin/templates/admin/filter.html:2 +#, python-format msgid " By %(filter_title)s " msgstr " Nach %(filter_title)s " @@ -962,9 +967,9 @@ msgid "" "database tables have been created, and make sure the database is readable by " "the appropriate user." msgstr "" -"Irgendetwas ist falsch mit der Datenbankkonfiguration. Bitte sicherstellen, das " -"die richtigen Datenbanktabellen angelegt wurden und bitte sicherstellen, das die " -"Datenbank vom verwendeten Datenbankbenutzer auch lesbar ist." +"Irgendetwas ist falsch mit der Datenbankkonfiguration. Bitte sicherstellen, " +"das die richtigen Datenbanktabellen angelegt wurden und bitte sicherstellen, " +"das die Datenbank vom verwendeten Datenbankbenutzer auch lesbar ist." #: contrib/admin/templates/admin/auth/user/add_form.html:6 msgid "" @@ -1252,8 +1257,8 @@ msgid "" "Example: 'flatpages/contact_page.html'. If this isn't provided, the system " "will use 'flatpages/default.html'." msgstr "" -"Beispiel: 'flatpages/contact_page.html'. Wenn dieses Feld nicht gefllt ist, wird " -"'flatpages/default.html' als Standard gewhlt." +"Beispiel: 'flatpages/contact_page.html'. Wenn dieses Feld nicht gefllt ist, " +"wird 'flatpages/default.html' als Standard gewhlt." #: contrib/flatpages/models.py:14 msgid "registration required" @@ -1350,8 +1355,8 @@ msgid "" "Designates whether this user can log into the Django admin. Unselect this " "instead of deleting accounts." msgstr "" -"Gibt an, ob der Benutzer sich an der Administrationsseite anmelden kann. Anstelle " -"Benutzer zu lschen, kann das hier auch einfach abgeschaltet werden." +"Gibt an, ob der Benutzer sich an der Administrationsseite anmelden kann. " +"Anstelle Benutzer zu lschen, kann das hier auch einfach abgeschaltet werden." #: contrib/auth/models.py:97 msgid "superuser status" @@ -1425,6 +1430,22 @@ msgstr "" msgid "This account is inactive." msgstr "Dieser Benutzer ist inaktiv." +#: contrib/auth/forms.py:84 +msgid "" +"That e-mail address doesn't have an associated user acount. Are you sure " +"you've registered?" +msgstr "" +"Die Email-Adresse hat keinen Benutzer zugeordnet. Sicher, das die Adresse " +"hier angemeldet ist?" + +#: contrib/auth/forms.py:116 +msgid "The two 'new password' fields didn't match." +msgstr "Die zwei Passwrter sind nicht gleich." + +#: contrib/auth/forms.py:123 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Das alte Passwort war falsch. Bitte neu eingeben." + #: contrib/contenttypes/models.py:20 msgid "python model class name" msgstr "Python Model-Klassenname" @@ -1872,6 +1893,7 @@ msgid "Year must be 1900 or later." msgstr "Das Jahr muss 1900 oder spter sein." #: core/validators.py:142 +#, python-format msgid "Invalid date: %s." msgstr "Ungltiges Datum: %s" @@ -1895,7 +1917,8 @@ msgstr "Bitte eine gltige eMail-Adresse eingeben" #: core/validators.py:172 core/validators.py:401 forms/__init__.py:661 msgid "No file was submitted. Check the encoding type on the form." -msgstr "Es wurde keine Datei geschickt. Eventuell ist das Formular-Encoding falsch." +msgstr "" +"Es wurde keine Datei geschickt. Eventuell ist das Formular-Encoding falsch." #: core/validators.py:176 msgid "" @@ -2007,6 +2030,7 @@ msgstr[0] "Bitte eine gltige Dezimalzahl mit maximal %s Ziffer eingeben." msgstr[1] "Bitte eine gltige Dezimalzahl mit maximal %s Ziffern eingeben." #: core/validators.py:381 +#, python-format msgid "" "Please enter a valid decimal number with a whole part of at most %s digit." msgid_plural "" @@ -2111,14 +2135,17 @@ msgstr "" "beginnt mit \"%(start)s\"." #: views/generic/create_update.py:43 +#, python-format msgid "The %(verbose_name)s was created successfully." msgstr "%(verbose_name)s wurde erfolgreich angelegt." #: views/generic/create_update.py:117 +#, python-format msgid "The %(verbose_name)s was updated successfully." msgstr "%(verbose_name)s wurde erfolgreich aktualisiert." #: views/generic/create_update.py:184 +#, python-format msgid "The %(verbose_name)s was deleted." msgstr "%(verbose_name)s wurde gelscht" diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/django.mo b/django/conf/locale/zh_CN/LC_MESSAGES/django.mo Binary files differindex 9fc04b9395..0d6bf90c0e 100644 --- a/django/conf/locale/zh_CN/LC_MESSAGES/django.mo +++ b/django/conf/locale/zh_CN/LC_MESSAGES/django.mo diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/django.po b/django/conf/locale/zh_CN/LC_MESSAGES/django.po index 7718514299..2552b677bd 100644 --- a/django/conf/locale/zh_CN/LC_MESSAGES/django.po +++ b/django/conf/locale/zh_CN/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: django v1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-05-16 10:10+0200\n" -"PO-Revision-Date: 2006-05-17 13:47+0800\n" +"PO-Revision-Date: 2006-09-01 22:05+0800\n" "Last-Translator: limodou <limodou@gmail.com>\n" "Language-Team: Simplified Chinese <limodou@gmail.com>\n" "MIME-Version: 1.0\n" @@ -1167,7 +1167,7 @@ msgstr "个人信息" #: contrib/auth/models.py:77 msgid "Permissions" -msgstr "许可" +msgstr "权限" #: contrib/auth/models.py:78 msgid "Important dates" diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo Binary files differindex 983a8a7154..ec7580a862 100644 --- a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo +++ b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po index 1e9e7dbeb7..610e61d17a 100644 --- a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po @@ -3,22 +3,21 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: Django 0.95\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-03-21 18:43+0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <max@exoweb.net>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2006-09-25 08:35+0800\n" +"Last-Translator: limodou <limodou@gmail.com>\n" +"Language-Team: limodou <limodou@gmail.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: contrib/admin/media/js/SelectFilter2.js:33 msgid "Available %s" -msgstr "可行 %s" +msgstr "可用 %s" #: contrib/admin/media/js/SelectFilter2.js:41 msgid "Choose all" @@ -30,34 +29,32 @@ msgstr "增加" #: contrib/admin/media/js/SelectFilter2.js:48 msgid "Remove" -msgstr "移出" +msgstr "删除" #: contrib/admin/media/js/SelectFilter2.js:53 msgid "Chosen %s" -msgstr "选择 %s" +msgstr "选中的 %s" #: contrib/admin/media/js/SelectFilter2.js:54 msgid "Select your choice(s) and click " -msgstr "挑选你的选择并且点击 " +msgstr "选择并点击 " #: contrib/admin/media/js/SelectFilter2.js:59 msgid "Clear all" -msgstr "清除所有" +msgstr "清除全部" #: contrib/admin/media/js/dateparse.js:32 #: contrib/admin/media/js/calendar.js:24 -msgid "" -"January February March April May June July August September October November " -"December" +msgid "January February March April May June July August September October November December" msgstr "一月 二月 三月 四月 五月 六月 六月 七月 八月 九月 十月 十一月 十二月" #: contrib/admin/media/js/dateparse.js:33 msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" -msgstr "星期天 星期一 星期二 星期三 星期四 星期五 星期六" +msgstr "星期日 星期一 星期二 星期三 星期四 星期五 星期六" #: contrib/admin/media/js/calendar.js:25 msgid "S M T W T F S" -msgstr "日 月 火 水 木 金 土" +msgstr "日 一 二 三 四 五 六" #: contrib/admin/media/js/admin/DateTimeShortcuts.js:45 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:80 @@ -105,3 +102,4 @@ msgstr "昨天" #: contrib/admin/media/js/admin/DateTimeShortcuts.js:164 msgid "Tomorrow" msgstr "明天" + diff --git a/django/contrib/auth/decorators.py b/django/contrib/auth/decorators.py index 8164d8314e..37e948f8fe 100644 --- a/django/contrib/auth/decorators.py +++ b/django/contrib/auth/decorators.py @@ -29,8 +29,8 @@ login_required.__doc__ = ( def permission_required(perm, login_url=LOGIN_URL): """ - Decorator for views that checks if a user has a particular permission - enabled, redirectiing to the log-in page if necessary. + Decorator for views that checks whether a user has a particular permission + enabled, redirecting to the log-in page if necessary. """ return user_passes_test(lambda u: u.has_perm(perm), login_url=login_url) diff --git a/django/contrib/auth/forms.py b/django/contrib/auth/forms.py index ad8d423ebf..6fd583dcc0 100644 --- a/django/contrib/auth/forms.py +++ b/django/contrib/auth/forms.py @@ -4,6 +4,7 @@ from django.contrib.sites.models import Site from django.template import Context, loader from django.core import validators from django import forms +from django.utils.translation import gettext_lazy as _ class UserCreationForm(forms.Manipulator): "A form that creates a user, with no privileges, from the given username and password." @@ -13,7 +14,7 @@ class UserCreationForm(forms.Manipulator): validator_list=[validators.isAlphaNumeric, self.isValidUsername]), forms.PasswordField(field_name='password1', length=30, maxlength=60, is_required=True), forms.PasswordField(field_name='password2', length=30, maxlength=60, is_required=True, - validator_list=[validators.AlwaysMatchesOtherField('password1', "The two password fields didn't match.")]), + validator_list=[validators.AlwaysMatchesOtherField('password1', _("The two password fields didn't match."))]), ) def isValidUsername(self, field_data, all_data): @@ -21,7 +22,7 @@ class UserCreationForm(forms.Manipulator): User.objects.get(username=field_data) except User.DoesNotExist: return - raise validators.ValidationError, 'A user with that username already exists.' + raise validators.ValidationError, _('A user with that username already exists.') def save(self, new_data): "Creates the user." @@ -81,7 +82,7 @@ class PasswordResetForm(forms.Manipulator): try: self.user_cache = User.objects.get(email__iexact=new_data) except User.DoesNotExist: - raise validators.ValidationError, "That e-mail address doesn't have an associated user acount. Are you sure you've registered?" + raise validators.ValidationError, _("That e-mail address doesn't have an associated user acount. Are you sure you've registered?") def save(self, domain_override=None, email_template_name='registration/password_reset_email.html'): "Calculates a new password randomly and sends it to the user" @@ -113,14 +114,14 @@ class PasswordChangeForm(forms.Manipulator): forms.PasswordField(field_name="old_password", length=30, maxlength=30, is_required=True, validator_list=[self.isValidOldPassword]), forms.PasswordField(field_name="new_password1", length=30, maxlength=30, is_required=True, - validator_list=[validators.AlwaysMatchesOtherField('new_password2', "The two 'new password' fields didn't match.")]), + validator_list=[validators.AlwaysMatchesOtherField('new_password2', _("The two 'new password' fields didn't match."))]), forms.PasswordField(field_name="new_password2", length=30, maxlength=30, is_required=True), ) def isValidOldPassword(self, new_data, all_data): "Validates that the old_password field is correct." if not self.user.check_password(new_data): - raise validators.ValidationError, "Your old password was entered incorrectly. Please enter it again." + raise validators.ValidationError, _("Your old password was entered incorrectly. Please enter it again.") def save(self, new_data): "Saves the new password." diff --git a/django/core/management.py b/django/core/management.py index bd162a1e8d..09db6e5c01 100644 --- a/django/core/management.py +++ b/django/core/management.py @@ -1128,7 +1128,7 @@ def execute_from_command_line(action_mapping=DEFAULT_ACTION_MAPPING, argv=None): parser.add_option('--verbosity', action='store', dest='verbosity', default='2', type='choice', choices=['0', '1', '2'], help='Verbosity level; 0=minimal output, 1=normal output, 2=all output'), - parser.add_option('--adminmedia', dest='admin_media_path', default='', help='Lets you manually specify the directory to serve admin media from when running the development server.'), + parser.add_option('--adminmedia', dest='admin_media_path', default='', help='Specifies the directory from which to serve admin media for runserver.'), options, args = parser.parse_args(argv[1:]) diff --git a/django/core/servers/basehttp.py b/django/core/servers/basehttp.py index fe534d5da0..a16b8b675a 100644 --- a/django/core/servers/basehttp.py +++ b/django/core/servers/basehttp.py @@ -594,7 +594,7 @@ class AdminMediaHandler(object): Use this ONLY LOCALLY, for development! This hasn't been tested for security and is not super efficient. """ - def __init__(self, application, media_dir = None): + def __init__(self, application, media_dir=None): from django.conf import settings self.application = application if not media_dir: diff --git a/django/core/validators.py b/django/core/validators.py index f2f3f44914..4c3f59143e 100644 --- a/django/core/validators.py +++ b/django/core/validators.py @@ -249,7 +249,7 @@ def hasNoProfanities(field_data, all_data): Watch your mouth! The words "f--k" and "s--t" are not allowed here. """ field_data = field_data.lower() # normalize - words_seen = [w for w in settings.PROFANITIES_LIST if field_data.find(w) > -1] + words_seen = [w for w in settings.PROFANITIES_LIST if w in field_data] if words_seen: from django.utils.text import get_text_list plural = len(words_seen) > 1 @@ -377,7 +377,7 @@ class IsValidFloat(object): if len(data) > max_allowed_length: raise ValidationError, ngettext("Please enter a valid decimal number with at most %s total digit.", "Please enter a valid decimal number with at most %s total digits.", self.max_digits) % self.max_digits - if (not '.' in data and len(data) > (max_allowed_length - self.decimal_places)) or ('.' in data and len(data) > (self.max_digits - (self.decimal_places - len(data.split('.')[1])) + 1)): + if (not '.' in data and len(data) > (max_allowed_length - self.decimal_places - 1)) or ('.' in data and len(data) > (max_allowed_length - (self.decimal_places - len(data.split('.')[1])))): raise ValidationError, ngettext( "Please enter a valid decimal number with a whole part of at most %s digit.", "Please enter a valid decimal number with a whole part of at most %s digits.", str(self.max_digits-self.decimal_places)) % str(self.max_digits-self.decimal_places) if '.' in data and len(data.split('.')[1]) > self.decimal_places: diff --git a/django/db/backends/ansi/sql.py b/django/db/backends/ansi/sql.py index affe77a41f..a6c50298e6 100644 --- a/django/db/backends/ansi/sql.py +++ b/django/db/backends/ansi/sql.py @@ -73,7 +73,7 @@ class SchemaBuilder(object): table_output = [] for f in opts.fields: - if isinstance(f, models.ForeignKey): + if isinstance(f, (models.ForeignKey, models.OneToOneField)): rel_field = f.rel.get_related_field() data_type = self.get_rel_data_type(rel_field) else: diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 1c85b5b68a..7534a634cc 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -367,8 +367,8 @@ class BooleanField(Field): def to_python(self, value): if value in (True, False): return value - if value in ('t', 'True'): return True - if value in ('f', 'False'): return False + if value in ('t', 'True', '1'): return True + if value in ('f', 'False', '0'): return False raise validators.ValidationError, gettext("This value must be either True or False.") def get_manipulator_field_objs(self): diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index 6276c55f69..dc2ae69fa7 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -618,7 +618,7 @@ class ManyToManyField(RelatedField, Field): msg = gettext_lazy('Separate multiple IDs with commas.') else: msg = gettext_lazy('Hold down "Control", or "Command" on a Mac, to select more than one.') - self.help_text = string_concat(self.help_text, msg) + self.help_text = string_concat(self.help_text, ' ', msg) def get_manipulator_field_objs(self): if self.rel.raw_id_admin: diff --git a/django/db/models/manipulators.py b/django/db/models/manipulators.py index b0ce48dec5..faf453b86b 100644 --- a/django/db/models/manipulators.py +++ b/django/db/models/manipulators.py @@ -215,8 +215,8 @@ class AutomaticManipulator(forms.Manipulator): # Save many-to-many objects. for f in related.opts.many_to_many: if child_follow.get(f.name, None) and not f.rel.edit_inline: - was_changed = getattr(new_rel_obj, 'set_%s' % f.name)(rel_new_data[f.attname]) - if self.change and was_changed: + setattr(new_rel_obj, f.name, f.rel.to.objects.filter(pk__in=rel_new_data[f.attname])) + if self.change: self.fields_changed.append('%s for %s "%s"' % (f.verbose_name, related.opts.verbose_name, new_rel_obj)) # If, in the change stage, all of the core fields were blank and diff --git a/django/db/models/query.py b/django/db/models/query.py index 78179244e6..f16e6869e3 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -732,14 +732,10 @@ def parse_lookup(kwarg_items, opts): # Extract the last elements of the kwarg. # The very-last is the lookup_type (equals, like, etc). # The second-last is the table column on which the lookup_type is - # to be performed. - # The exceptions to this are: - # 1) "pk", which is an implicit id__exact; - # if we find "pk", make the lookup_type "exact', and insert - # a dummy name of None, which we will replace when - # we know which table column to grab as the primary key. - # 2) If there is only one part, or the last part is not a query - # term, assume that the query is an __exact + # to be performed. If this name is 'pk', it will be substituted with + # the name of the primary key. + # If there is only one part, or the last part is not a query + # term, assume that the query is an __exact lookup_type = path.pop() if lookup_type == 'pk': lookup_type = 'exact' @@ -789,7 +785,7 @@ def lookup_inner(path, lookup_type, value, opts, table, column): name = path.pop(0) # Has the primary key been requested? If so, expand it out # to be the name of the current class' primary key - if name is None: + if name is None or name == 'pk': name = current_opts.pk.name # Try to find the name in the fields associated with the current class diff --git a/django/forms/__init__.py b/django/forms/__init__.py index 759a32ba81..5f47059f03 100644 --- a/django/forms/__init__.py +++ b/django/forms/__init__.py @@ -54,6 +54,7 @@ class Manipulator(object): def get_validation_errors(self, new_data): "Returns dictionary mapping field_names to error-message lists" errors = {} + self.prepare(new_data) for field in self.fields: errors.update(field.get_validation_errors(new_data)) val_name = 'validate_%s' % field.field_name @@ -638,7 +639,7 @@ class CheckboxSelectMultipleField(SelectMultipleField): if str(value) in str_data_list: checked_html = ' checked="checked"' field_name = '%s%s' % (self.field_name, value) - output.append('<li><input type="checkbox" id="%s" class="v%s" name="%s"%s /> <label for="%s">%s</label></li>' % \ + output.append('<li><input type="checkbox" id="%s" class="v%s" name="%s"%s value="on" /> <label for="%s">%s</label></li>' % \ (self.get_id() + escape(value), self.__class__.__name__, field_name, checked_html, self.get_id() + escape(value), choice)) output.append('</ul>') diff --git a/django/middleware/common.py b/django/middleware/common.py index 4f060b8590..8392fb0e5f 100644 --- a/django/middleware/common.py +++ b/django/middleware/common.py @@ -64,9 +64,9 @@ class CommonMiddleware(object): is_internal = referer and (domain in referer) path = request.get_full_path() if referer and not _is_ignorable_404(path) and (is_internal or '?' not in referer): - ua = request.META.get('HTTP_USER_AGENT','<none>') + ua = request.META.get('HTTP_USER_AGENT', '<none>') mail_managers("Broken %slink on %s" % ((is_internal and 'INTERNAL ' or ''), domain), - "Referrer: %s\nRequested URL: %s\nUser Agent: %s\n" % (referer, request.get_full_path(), ua)) + "Referrer: %s\nRequested URL: %s\nUser agent: %s\n" % (referer, request.get_full_path(), ua)) return response # Use ETags, if requested. diff --git a/django/views/generic/create_update.py b/django/views/generic/create_update.py index 034253a549..3a03fa59e4 100644 --- a/django/views/generic/create_update.py +++ b/django/views/generic/create_update.py @@ -102,7 +102,7 @@ def update_object(request, model, object_id=None, slug=None, except ObjectDoesNotExist: raise Http404, "No %s found for %s" % (model._meta.verbose_name, lookup_kwargs) - manipulator = model.ChangeManipulator(getattr(object, object._meta.pk.name), follow=follow) + manipulator = model.ChangeManipulator(getattr(object, object._meta.pk.attname), follow=follow) if request.POST: new_data = request.POST.copy() @@ -142,7 +142,7 @@ def update_object(request, model, object_id=None, slug=None, else: c[key] = value response = HttpResponse(t.render(c)) - populate_xheaders(request, response, model, getattr(object, object._meta.pk.name)) + populate_xheaders(request, response, model, getattr(object, object._meta.pk.attname)) return response def delete_object(request, model, post_delete_redirect, @@ -196,5 +196,5 @@ def delete_object(request, model, post_delete_redirect, else: c[key] = value response = HttpResponse(t.render(c)) - populate_xheaders(request, response, model, getattr(object, object._meta.pk.name)) + populate_xheaders(request, response, model, getattr(object, object._meta.pk.attname)) return response |
