1
0
mirror of https://github.com/django/django.git synced 2025-07-06 10:49:17 +00:00

queryset-refactor: Merged from turnk up to [7135] because I need some stuff.

git-svn-id: http://code.djangoproject.com/svn/django/branches/queryset-refactor@7136 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2008-02-20 01:59:59 +00:00
parent da6570bf08
commit 3dd28bd566
33 changed files with 4614 additions and 88 deletions

View File

@ -56,6 +56,7 @@ answer newbie questions, and generally made Django that much better:
David Ascher <http://ascher.ca/> David Ascher <http://ascher.ca/>
Jökull Sólberg Auðunsson <jokullsolberg@gmail.com> Jökull Sólberg Auðunsson <jokullsolberg@gmail.com>
Arthur <avandorp@gmail.com> Arthur <avandorp@gmail.com>
David Avsajanishvili <avsd05@gmail.com>
axiak@mit.edu axiak@mit.edu
Jiri Barton Jiri Barton
Ned Batchelder <http://www.nedbatchelder.com/> Ned Batchelder <http://www.nedbatchelder.com/>

View File

@ -52,7 +52,7 @@ LANGUAGES = (
('fa', gettext_noop('Persian')), ('fa', gettext_noop('Persian')),
('fi', gettext_noop('Finnish')), ('fi', gettext_noop('Finnish')),
('fr', gettext_noop('French')), ('fr', gettext_noop('French')),
('ga', gettext_noop('Gaeilge')), ('ga', gettext_noop('Irish')),
('gl', gettext_noop('Galician')), ('gl', gettext_noop('Galician')),
('hu', gettext_noop('Hungarian')), ('hu', gettext_noop('Hungarian')),
('he', gettext_noop('Hebrew')), ('he', gettext_noop('Hebrew')),
@ -60,6 +60,7 @@ LANGUAGES = (
('is', gettext_noop('Icelandic')), ('is', gettext_noop('Icelandic')),
('it', gettext_noop('Italian')), ('it', gettext_noop('Italian')),
('ja', gettext_noop('Japanese')), ('ja', gettext_noop('Japanese')),
('ka', gettext_noop('Georgian')),
('ko', gettext_noop('Korean')), ('ko', gettext_noop('Korean')),
('km', gettext_noop('Khmer')), ('km', gettext_noop('Khmer')),
('kn', gettext_noop('Kannada')), ('kn', gettext_noop('Kannada')),

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,118 @@
# Translation of Django Java-script part to Georgian.
# Copyright (C) 2008
# This file is distributed under the same license as the PACKAGE package.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: django 0.97\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-02-16 22:31+0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: David Avsajanishvili <avsd05@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\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
#, perl-format
msgid "Available %s"
msgstr "მისაწვდომი %s"
#: contrib/admin/media/js/SelectFilter2.js:41
msgid "Choose all"
msgstr "ავირჩიოთ ყველა"
#: contrib/admin/media/js/SelectFilter2.js:46
msgid "Add"
msgstr "დავამატოთ"
#: contrib/admin/media/js/SelectFilter2.js:48
msgid "Remove"
msgstr "წავშალოთ"
#: contrib/admin/media/js/SelectFilter2.js:53
#, perl-format
msgid "Chosen %s"
msgstr "არჩეული %s"
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
msgstr "აირჩიეთ და დააწკაპეთ "
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"
msgstr "გავასუფთავოთ ყველა"
#: contrib/admin/media/js/calendar.js:24
#: contrib/admin/media/js/dateparse.js:32
msgid ""
"January February March April May June July August September October November "
"December"
msgstr "იანვარი თებერვალი მარტი აპრილი მაისი ივნისი ივლისი აგვისტო სექტემბერი "
"ოქტომბერი ნოემბერი დეკემბერი"
#: contrib/admin/media/js/calendar.js:25
msgid "S M T W T F S"
msgstr "კ ო ს ო ხ პ შ"
#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr "კვირა ორშაბათი სამშაბათი ოთხშაბათი ხუთშაბათი პარასკევი შაბათი"
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
msgid "Show"
msgstr "ვაჩვენოთ"
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
msgid "Hide"
msgstr "დავმალოთ"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Now"
msgstr "ახლა"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
msgid "Clock"
msgstr "საათი"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
msgid "Choose a time"
msgstr "ავირჩიოთ დრო"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "Midnight"
msgstr "შუაღამე"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "6 a.m."
msgstr "დილის 6 სთ"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
msgid "Noon"
msgstr "შუადღე"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
msgid "Cancel"
msgstr "უარი"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
msgid "Today"
msgstr "დღეს"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
msgid "Calendar"
msgstr "კალენდარი"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
msgid "Yesterday"
msgstr "გუშინ"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
msgid "Tomorrow"
msgstr "ხვალ"

View File

@ -5,7 +5,7 @@ from django.contrib.auth import authenticate, login
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.utils.translation import ugettext_lazy, ugettext as _ from django.utils.translation import ugettext_lazy, ugettext as _
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
import base64, datetime, md5 import base64, md5
import cPickle as pickle import cPickle as pickle
ERROR_MESSAGE = ugettext_lazy("Please enter a correct username and password. Note that both fields are case-sensitive.") ERROR_MESSAGE = ugettext_lazy("Please enter a correct username and password. Note that both fields are case-sensitive.")

View File

@ -8,8 +8,6 @@ from django.utils.translation import get_date_formats
from django.utils.encoding import force_unicode from django.utils.encoding import force_unicode
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.views.generic import date_based from django.views.generic import date_based
import datetime
import time
class CalendarPlugin(DatabrowsePlugin): class CalendarPlugin(DatabrowsePlugin):
def __init__(self, field_names=None): def __init__(self, field_names=None):

View File

@ -7,8 +7,6 @@ from django.utils.text import capfirst
from django.utils.encoding import smart_str, force_unicode from django.utils.encoding import smart_str, force_unicode
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.views.generic import date_based from django.views.generic import date_based
import datetime
import time
import urllib import urllib
class FieldChoicePlugin(DatabrowsePlugin): class FieldChoicePlugin(DatabrowsePlugin):

View File

@ -2,8 +2,6 @@ from django.db.models import FieldDoesNotExist, DateTimeField
from django.http import Http404 from django.http import Http404
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.contrib.databrowse.datastructures import EasyModel, EasyChoice from django.contrib.databrowse.datastructures import EasyModel, EasyChoice
import datetime
import time
########### ###########
# CHOICES # # CHOICES #

View File

@ -3,7 +3,6 @@ Formtools Preview application.
""" """
from django.conf import settings from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from django.http import Http404 from django.http import Http404
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.template.context import RequestContext from django.template.context import RequestContext

View File

@ -3,8 +3,6 @@ from django.contrib.formtools import preview
from django import http from django import http
from django.conf import settings from django.conf import settings
from django.test import TestCase from django.test import TestCase
from django.test.client import Client
success_string = "Done was called!" success_string = "Done was called!"
test_data = {'field1': u'foo', test_data = {'field1': u'foo',
@ -88,6 +86,3 @@ class PreviewTests(TestCase):
response = self.client.post('/test1/', test_data) response = self.client.post('/test1/', test_data)
self.assertEqual(response.content, success_string) self.assertEqual(response.content, success_string)
if __name__ == '__main__':
unittest.main()

View File

@ -2,8 +2,7 @@ from django.utils.translation import ungettext, ugettext as _
from django.utils.encoding import force_unicode from django.utils.encoding import force_unicode
from django import template from django import template
from django.template import defaultfilters from django.template import defaultfilters
from django.conf import settings from datetime import date
from datetime import date, timedelta
import re import re
register = template.Library() register = template.Library()

View File

@ -7,7 +7,6 @@ from django.newforms import ValidationError
from django.newforms.fields import RegexField, CharField, Select, EMPTY_VALUES from django.newforms.fields import RegexField, CharField, Select, EMPTY_VALUES
from django.utils.encoding import smart_unicode from django.utils.encoding import smart_unicode
from django.utils.translation import ugettext from django.utils.translation import ugettext
import re
class ARProvinceSelect(Select): class ARProvinceSelect(Select):
""" """

View File

@ -7,8 +7,6 @@ from django.newforms import ValidationError
from django.utils.translation import ugettext from django.utils.translation import ugettext
from django.newforms.fields import RegexField, Select from django.newforms.fields import RegexField, Select
import re
class JPPostalCodeField(RegexField): class JPPostalCodeField(RegexField):
""" """
A form field that validates its input is a Japanese postcode. A form field that validates its input is a Japanese postcode.

View File

@ -1,10 +1,5 @@
import os
import sys
import time
import datetime
import base64 import base64
import md5 import md5
import random
import cPickle as pickle import cPickle as pickle
from django.db import models from django.db import models

View File

@ -14,7 +14,6 @@ u'lorem ipsum dolor'
""" """
from django.contrib.webdesign.lorem_ipsum import * from django.contrib.webdesign.lorem_ipsum import *
import datetime
if __name__ == '__main__': if __name__ == '__main__':
import doctest import doctest

View File

@ -4,7 +4,6 @@ Serialize data to/from JSON
import datetime import datetime
from django.utils import simplejson from django.utils import simplejson
from django.utils.simplejson import decoder
from django.core.serializers.python import Serializer as PythonSerializer from django.core.serializers.python import Serializer as PythonSerializer
from django.core.serializers.python import Deserializer as PythonDeserializer from django.core.serializers.python import Deserializer as PythonDeserializer
try: try:

View File

@ -4,7 +4,6 @@ YAML serializer.
Requires PyYaml (http://pyyaml.org/), but that's checked for in __init__. Requires PyYaml (http://pyyaml.org/), but that's checked for in __init__.
""" """
import datetime
from django.db import models from django.db import models
from django.core.serializers.python import Serializer as PythonSerializer from django.core.serializers.python import Serializer as PythonSerializer
from django.core.serializers.python import Deserializer as PythonDeserializer from django.core.serializers.python import Deserializer as PythonDeserializer

View File

@ -21,7 +21,6 @@ if (version < (1,2,1) or (version[:3] == (1, 2, 1) and
from MySQLdb.converters import conversions from MySQLdb.converters import conversions
from MySQLdb.constants import FIELD_TYPE from MySQLdb.constants import FIELD_TYPE
import types
import re import re
# Raise exceptions for database warnings if DEBUG is on # Raise exceptions for database warnings if DEBUG is on

View File

@ -160,6 +160,9 @@ class Model(object):
def __ne__(self, other): def __ne__(self, other):
return not self.__eq__(other) return not self.__eq__(other)
def __hash__(self):
return hash(self._get_pk_val())
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
dispatcher.send(signal=signals.pre_init, sender=self.__class__, args=args, kwargs=kwargs) dispatcher.send(signal=signals.pre_init, sender=self.__class__, args=args, kwargs=kwargs)

View File

@ -462,6 +462,9 @@ class BooleanField(Field):
kwargs['blank'] = True kwargs['blank'] = True
Field.__init__(self, *args, **kwargs) Field.__init__(self, *args, **kwargs)
def get_internal_type(self):
return "BooleanField"
def to_python(self, value): def to_python(self, value):
if value in (True, False): return value if value in (True, False): return value
if value in ('t', 'True', '1'): return True if value in ('t', 'True', '1'): return True
@ -480,6 +483,9 @@ class CharField(Field):
def get_manipulator_field_objs(self): def get_manipulator_field_objs(self):
return [oldforms.TextField] return [oldforms.TextField]
def get_internal_type(self):
return "CharField"
def to_python(self, value): def to_python(self, value):
if isinstance(value, basestring): if isinstance(value, basestring):
return value return value
@ -510,6 +516,9 @@ class DateField(Field):
kwargs['blank'] = True kwargs['blank'] = True
Field.__init__(self, verbose_name, name, **kwargs) Field.__init__(self, verbose_name, name, **kwargs)
def get_internal_type(self):
return "DateField"
def to_python(self, value): def to_python(self, value):
if value is None: if value is None:
return value return value
@ -579,6 +588,9 @@ class DateField(Field):
return super(DateField, self).formfield(**defaults) return super(DateField, self).formfield(**defaults)
class DateTimeField(DateField): class DateTimeField(DateField):
def get_internal_type(self):
return "DateTimeField"
def to_python(self, value): def to_python(self, value):
if value is None: if value is None:
return value return value
@ -649,6 +661,9 @@ class DecimalField(Field):
self.max_digits, self.decimal_places = max_digits, decimal_places self.max_digits, self.decimal_places = max_digits, decimal_places
Field.__init__(self, verbose_name, name, **kwargs) Field.__init__(self, verbose_name, name, **kwargs)
def get_internal_type(self):
return "DecimalField"
def to_python(self, value): def to_python(self, value):
if value is None: if value is None:
return value return value
@ -708,9 +723,6 @@ class EmailField(CharField):
kwargs['max_length'] = kwargs.get('max_length', 75) kwargs['max_length'] = kwargs.get('max_length', 75)
CharField.__init__(self, *args, **kwargs) CharField.__init__(self, *args, **kwargs)
def get_internal_type(self):
return "CharField"
def get_manipulator_field_objs(self): def get_manipulator_field_objs(self):
return [oldforms.EmailField] return [oldforms.EmailField]
@ -728,6 +740,9 @@ class FileField(Field):
kwargs['max_length'] = kwargs.get('max_length', 100) kwargs['max_length'] = kwargs.get('max_length', 100)
Field.__init__(self, verbose_name, name, **kwargs) Field.__init__(self, verbose_name, name, **kwargs)
def get_internal_type(self):
return "FileField"
def get_db_prep_save(self, value): def get_db_prep_save(self, value):
"Returns field's value prepared for saving into a database." "Returns field's value prepared for saving into a database."
# Need to convert UploadedFile objects provided via a form to unicode for database insertion # Need to convert UploadedFile objects provided via a form to unicode for database insertion
@ -837,12 +852,18 @@ class FilePathField(Field):
def get_manipulator_field_objs(self): def get_manipulator_field_objs(self):
return [curry(oldforms.FilePathField, path=self.path, match=self.match, recursive=self.recursive)] return [curry(oldforms.FilePathField, path=self.path, match=self.match, recursive=self.recursive)]
def get_internal_type(self):
return "FilePathField"
class FloatField(Field): class FloatField(Field):
empty_strings_allowed = False empty_strings_allowed = False
def get_manipulator_field_objs(self): def get_manipulator_field_objs(self):
return [oldforms.FloatField] return [oldforms.FloatField]
def get_internal_type(self):
return "FloatField"
def formfield(self, **kwargs): def formfield(self, **kwargs):
defaults = {'form_class': forms.FloatField} defaults = {'form_class': forms.FloatField}
defaults.update(kwargs) defaults.update(kwargs)
@ -865,6 +886,9 @@ class ImageField(FileField):
if not self.height_field: if not self.height_field:
setattr(cls, 'get_%s_height' % self.name, curry(cls._get_FIELD_height, field=self)) setattr(cls, 'get_%s_height' % self.name, curry(cls._get_FIELD_height, field=self))
def get_internal_type(self):
return "ImageField"
def save_file(self, new_data, new_object, original_object, change, rel, save=True): def save_file(self, new_data, new_object, original_object, change, rel, save=True):
FileField.save_file(self, new_data, new_object, original_object, change, rel, save) FileField.save_file(self, new_data, new_object, original_object, change, rel, save)
# If the image has height and/or width field(s) and they haven't # If the image has height and/or width field(s) and they haven't
@ -887,6 +911,9 @@ class IntegerField(Field):
def get_manipulator_field_objs(self): def get_manipulator_field_objs(self):
return [oldforms.IntegerField] return [oldforms.IntegerField]
def get_internal_type(self):
return "IntegerField"
def formfield(self, **kwargs): def formfield(self, **kwargs):
defaults = {'form_class': forms.IntegerField} defaults = {'form_class': forms.IntegerField}
defaults.update(kwargs) defaults.update(kwargs)
@ -901,6 +928,9 @@ class IPAddressField(Field):
def get_manipulator_field_objs(self): def get_manipulator_field_objs(self):
return [oldforms.IPAddressField] return [oldforms.IPAddressField]
def get_internal_type(self):
return "IPAddressField"
def validate(self, field_data, all_data): def validate(self, field_data, all_data):
validators.isValidIPAddress4(field_data, None) validators.isValidIPAddress4(field_data, None)
@ -915,6 +945,9 @@ class NullBooleanField(Field):
kwargs['null'] = True kwargs['null'] = True
Field.__init__(self, *args, **kwargs) Field.__init__(self, *args, **kwargs)
def get_internal_type(self):
return "NullBooleanField"
def to_python(self, value): def to_python(self, value):
if value in (None, True, False): return value if value in (None, True, False): return value
if value in ('None'): return None if value in ('None'): return None
@ -934,6 +967,9 @@ class PhoneNumberField(IntegerField):
def get_manipulator_field_objs(self): def get_manipulator_field_objs(self):
return [oldforms.PhoneNumberField] return [oldforms.PhoneNumberField]
def get_internal_type(self):
return "PhoneNumberField"
def validate(self, field_data, all_data): def validate(self, field_data, all_data):
validators.isValidPhone(field_data, all_data) validators.isValidPhone(field_data, all_data)
@ -947,6 +983,9 @@ class PositiveIntegerField(IntegerField):
def get_manipulator_field_objs(self): def get_manipulator_field_objs(self):
return [oldforms.PositiveIntegerField] return [oldforms.PositiveIntegerField]
def get_internal_type(self):
return "PositiveIntegerField"
def formfield(self, **kwargs): def formfield(self, **kwargs):
defaults = {'min_value': 0} defaults = {'min_value': 0}
defaults.update(kwargs) defaults.update(kwargs)
@ -956,6 +995,9 @@ class PositiveSmallIntegerField(IntegerField):
def get_manipulator_field_objs(self): def get_manipulator_field_objs(self):
return [oldforms.PositiveSmallIntegerField] return [oldforms.PositiveSmallIntegerField]
def get_internal_type(self):
return "PositiveSmallIntegerField"
def formfield(self, **kwargs): def formfield(self, **kwargs):
defaults = {'min_value': 0} defaults = {'min_value': 0}
defaults.update(kwargs) defaults.update(kwargs)
@ -970,14 +1012,23 @@ class SlugField(CharField):
kwargs['db_index'] = True kwargs['db_index'] = True
super(SlugField, self).__init__(*args, **kwargs) super(SlugField, self).__init__(*args, **kwargs)
def get_internal_type(self):
return "SlugField"
class SmallIntegerField(IntegerField): class SmallIntegerField(IntegerField):
def get_manipulator_field_objs(self): def get_manipulator_field_objs(self):
return [oldforms.SmallIntegerField] return [oldforms.SmallIntegerField]
def get_internal_type(self):
return "SmallIntegerField"
class TextField(Field): class TextField(Field):
def get_manipulator_field_objs(self): def get_manipulator_field_objs(self):
return [oldforms.LargeTextField] return [oldforms.LargeTextField]
def get_internal_type(self):
return "TextField"
def formfield(self, **kwargs): def formfield(self, **kwargs):
defaults = {'widget': forms.Textarea} defaults = {'widget': forms.Textarea}
defaults.update(kwargs) defaults.update(kwargs)
@ -991,6 +1042,9 @@ class TimeField(Field):
kwargs['editable'] = False kwargs['editable'] = False
Field.__init__(self, verbose_name, name, **kwargs) Field.__init__(self, verbose_name, name, **kwargs)
def get_internal_type(self):
return "TimeField"
def get_db_prep_lookup(self, lookup_type, value): def get_db_prep_lookup(self, lookup_type, value):
if settings.DATABASE_ENGINE == 'oracle': if settings.DATABASE_ENGINE == 'oracle':
# Oracle requires a date in order to parse. # Oracle requires a date in order to parse.
@ -1055,9 +1109,6 @@ class URLField(CharField):
def get_manipulator_field_objs(self): def get_manipulator_field_objs(self):
return [oldforms.URLField] return [oldforms.URLField]
def get_internal_type(self):
return "CharField"
def formfield(self, **kwargs): def formfield(self, **kwargs):
defaults = {'form_class': forms.URLField, 'verify_exists': self.verify_exists} defaults = {'form_class': forms.URLField, 'verify_exists': self.verify_exists}
defaults.update(kwargs) defaults.update(kwargs)
@ -1067,6 +1118,9 @@ class USStateField(Field):
def get_manipulator_field_objs(self): def get_manipulator_field_objs(self):
return [oldforms.USStateField] return [oldforms.USStateField]
def get_internal_type(self):
return "USStateField"
def formfield(self, **kwargs): def formfield(self, **kwargs):
from django.contrib.localflavor.us.forms import USStateSelect from django.contrib.localflavor.us.forms import USStateSelect
defaults = {'widget': USStateSelect} defaults = {'widget': USStateSelect}
@ -1078,9 +1132,6 @@ class XMLField(TextField):
self.schema_path = schema_path self.schema_path = schema_path
Field.__init__(self, verbose_name, name, **kwargs) Field.__init__(self, verbose_name, name, **kwargs)
def get_internal_type(self):
return "TextField"
def get_manipulator_field_objs(self): def get_manipulator_field_objs(self):
return [curry(oldforms.XMLLargeTextField, schema_path=self.schema_path)] return [curry(oldforms.XMLLargeTextField, schema_path=self.schema_path)]
@ -1091,8 +1142,5 @@ class OrderingField(IntegerField):
kwargs['null'] = True kwargs['null'] = True
IntegerField.__init__(self, **kwargs ) IntegerField.__init__(self, **kwargs )
def get_internal_type(self):
return "IntegerField"
def get_manipulator_fields(self, opts, manipulator, change, name_prefix='', rel=False, follow=True): def get_manipulator_fields(self, opts, manipulator, change, name_prefix='', rel=False, follow=True):
return [oldforms.HiddenField(name_prefix + self.name)] return [oldforms.HiddenField(name_prefix + self.name)]

View File

@ -100,7 +100,7 @@ __all__ = [
import __future__ import __future__
import sys, traceback, inspect, linecache, os, re, types import sys, traceback, inspect, linecache, os, re
import unittest, difflib, pdb, tempfile import unittest, difflib, pdb, tempfile
import warnings import warnings
from StringIO import StringIO from StringIO import StringIO

View File

@ -1,7 +1,5 @@
import datetime
import sys import sys
from cStringIO import StringIO from cStringIO import StringIO
from urlparse import urlparse
from django.conf import settings from django.conf import settings
from django.contrib.auth import authenticate, login from django.contrib.auth import authenticate, login
from django.core.handlers.base import BaseHandler from django.core.handlers.base import BaseHandler

View File

@ -146,4 +146,3 @@ def run_tests(test_labels, verbosity=1, interactive=True, extra_tests=[]):
teardown_test_environment() teardown_test_environment()
return len(result.failures) + len(result.errors) return len(result.failures) + len(result.errors)

View File

@ -145,7 +145,7 @@ class SortedDict(dict):
"""Returns a copy of this object.""" """Returns a copy of this object."""
# This way of initializing the copy means it works for subclasses, too. # This way of initializing the copy means it works for subclasses, too.
obj = self.__class__(self) obj = self.__class__(self)
obj.keyOrder = self.keyOrder obj.keyOrder = self.keyOrder[:]
return obj return obj
def __repr__(self): def __repr__(self):

View File

@ -1758,8 +1758,7 @@ the cache of all one-to-many relationships ahead of time. Example::
print e.blog # Doesn't hit the database; uses cached version. print e.blog # Doesn't hit the database; uses cached version.
print e.blog # Doesn't hit the database; uses cached version. print e.blog # Doesn't hit the database; uses cached version.
``select_related()`` is documented in the "QuerySet methods that return new ``select_related()`` is documented in the `QuerySet methods that return new QuerySets`_ section above.
QuerySets" section above.
Backward Backward
~~~~~~~~ ~~~~~~~~

View File

@ -353,7 +353,7 @@ How do I install mod_python on Windows?
working`_. working`_.
.. _`win32 build of mod_python for Python 2.4`: http://www.lehuen.com/nicolas/index.php/2005/02/21/39-win32-build-of-mod_python-314-for-python-24 .. _`win32 build of mod_python for Python 2.4`: http://www.lehuen.com/nicolas/index.php/2005/02/21/39-win32-build-of-mod_python-314-for-python-24
.. _`Django on Windows howto`: http://thinkhole.org/wp/2006/04/03/django-on-windows-howto/ .. _`Django on Windows howto`: http://thinkhole.org/wp/django-on-windows/
.. _`Running mod_python on Apache on Windows2000`: http://groups-beta.google.com/group/comp.lang.python/msg/139af8c83a5a9d4f .. _`Running mod_python on Apache on Windows2000`: http://groups-beta.google.com/group/comp.lang.python/msg/139af8c83a5a9d4f
.. _`guide to getting mod_python working`: http://www.dscpl.com.au/articles/modpython-001.html .. _`guide to getting mod_python working`: http://www.dscpl.com.au/articles/modpython-001.html

View File

@ -88,7 +88,7 @@ something like::
for deserialized_object in serializers.deserialize("xml", data): for deserialized_object in serializers.deserialize("xml", data):
if object_should_be_saved(deserialized_object): if object_should_be_saved(deserialized_object):
obj.save() deserialized_object.save()
In other words, the usual use is to examine the deserialized objects to make In other words, the usual use is to examine the deserialized objects to make
sure that they are "appropriate" for saving before doing so. Of course, if you trust your data source you could just save the object and move on. sure that they are "appropriate" for saving before doing so. Of course, if you trust your data source you could just save the object and move on.

View File

@ -395,6 +395,8 @@ See the `internationalization docs`_ for more.
django.core.context_processors.media django.core.context_processors.media
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**New in Django development version**
If ``TEMPLATE_CONTEXT_PROCESSORS`` contains this processor, every If ``TEMPLATE_CONTEXT_PROCESSORS`` contains this processor, every
``RequestContext`` will contain a variable ``MEDIA_URL``, providing the ``RequestContext`` will contain a variable ``MEDIA_URL``, providing the
value of the `MEDIA_URL setting`_. value of the `MEDIA_URL setting`_.
@ -1014,7 +1016,7 @@ This is not a very common situation, but it's useful if you're rendering a
template yourself. For example:: template yourself. For example::
def render(self, context): def render(self, context):
t = template.load_template('small_fragment.html') t = template.loader.get_template('small_fragment.html')
return t.render(Context({'var': obj}, autoescape=context.autoescape)) return t.render(Context({'var': obj}, autoescape=context.autoescape))
If we had neglected to pass in the current ``context.autoescape`` value to our If we had neglected to pass in the current ``context.autoescape`` value to our

View File

@ -5,6 +5,11 @@
This is a basic model with only two non-primary-key fields. This is a basic model with only two non-primary-key fields.
""" """
try:
set
except NameError:
from sets import Set as set
from django.db import models from django.db import models
class Article(models.Model): class Article(models.Model):
@ -389,4 +394,10 @@ year, including Jan. 1 and Dec. 31.
>>> a.save() >>> a.save()
>>> Article.objects.get(pk=a.id).headline >>> Article.objects.get(pk=a.id).headline
u'\u6797\u539f \u3081\u3050\u307f' u'\u6797\u539f \u3081\u3050\u307f'
# Model instances have a hash function, so they can be used in sets or as
# dictionary keys. Two models compare as equal if their primary keys are equal.
>>> s = set([a10, a11, a12])
>>> Article.objects.get(headline='Article 11') in s
True
""" """

View File

@ -77,6 +77,8 @@ MultiValueDictKeyError: "Key 'lastname' not found in <MultiValueDict: {'position
'not one' 'not one'
>>> d.keys() == d.copy().keys() >>> d.keys() == d.copy().keys()
True True
>>> d2 = d.copy()
>>> d2['four'] = 'four'
>>> print repr(d) >>> print repr(d)
{'one': 'not one', 'two': 'two', 'three': 'three'} {'one': 'not one', 'two': 'two', 'three': 'three'}
>>> d.pop('one', 'missing') >>> d.pop('one', 'missing')