mirror of
https://github.com/django/django.git
synced 2025-11-07 07:15:35 +00:00
Merged the queryset-refactor branch into trunk.
This is a big internal change, but mostly backwards compatible with existing code. Also adds a couple of new features. Fixed #245, #1050, #1656, #1801, #2076, #2091, #2150, #2253, #2306, #2400, #2430, #2482, #2496, #2676, #2737, #2874, #2902, #2939, #3037, #3141, #3288, #3440, #3592, #3739, #4088, #4260, #4289, #4306, #4358, #4464, #4510, #4858, #5012, #5020, #5261, #5295, #5321, #5324, #5325, #5555, #5707, #5796, #5817, #5987, #6018, #6074, #6088, #6154, #6177, #6180, #6203, #6658 git-svn-id: http://code.djangoproject.com/svn/django/trunk@7477 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import copy
|
||||
import datetime
|
||||
import os
|
||||
import time
|
||||
@@ -75,15 +76,19 @@ class Field(object):
|
||||
# database level.
|
||||
empty_strings_allowed = True
|
||||
|
||||
# Tracks each time a Field instance is created. Used to retain order.
|
||||
# These track each time a Field instance is created. Used to retain order.
|
||||
# The auto_creation_counter is used for fields that Django implicitly
|
||||
# creates, creation_counter is used for all user-specified fields.
|
||||
creation_counter = 0
|
||||
auto_creation_counter = -1
|
||||
|
||||
def __init__(self, verbose_name=None, name=None, primary_key=False,
|
||||
max_length=None, unique=False, blank=False, null=False, db_index=False,
|
||||
core=False, rel=None, default=NOT_PROVIDED, editable=True, serialize=True,
|
||||
prepopulate_from=None, unique_for_date=None, unique_for_month=None,
|
||||
unique_for_year=None, validator_list=None, choices=None, radio_admin=None,
|
||||
help_text='', db_column=None, db_tablespace=None):
|
||||
max_length=None, unique=False, blank=False, null=False,
|
||||
db_index=False, core=False, rel=None, default=NOT_PROVIDED,
|
||||
editable=True, serialize=True, prepopulate_from=None,
|
||||
unique_for_date=None, unique_for_month=None, unique_for_year=None,
|
||||
validator_list=None, choices=None, radio_admin=None, help_text='',
|
||||
db_column=None, db_tablespace=None, auto_created=False):
|
||||
self.name = name
|
||||
self.verbose_name = verbose_name
|
||||
self.primary_key = primary_key
|
||||
@@ -109,14 +114,27 @@ class Field(object):
|
||||
# Set db_index to True if the field has a relationship and doesn't explicitly set db_index.
|
||||
self.db_index = db_index
|
||||
|
||||
# Increase the creation counter, and save our local copy.
|
||||
self.creation_counter = Field.creation_counter
|
||||
Field.creation_counter += 1
|
||||
# Adjust the appropriate creation counter, and save our local copy.
|
||||
if auto_created:
|
||||
self.creation_counter = Field.auto_creation_counter
|
||||
Field.auto_creation_counter -= 1
|
||||
else:
|
||||
self.creation_counter = Field.creation_counter
|
||||
Field.creation_counter += 1
|
||||
|
||||
def __cmp__(self, other):
|
||||
# This is needed because bisect does not take a comparison function.
|
||||
return cmp(self.creation_counter, other.creation_counter)
|
||||
|
||||
def __deepcopy__(self, memodict):
|
||||
# We don't have to deepcopy very much here, since most things are not
|
||||
# intended to be altered after initial creation.
|
||||
obj = copy.copy(self)
|
||||
if self.rel:
|
||||
obj.rel = copy.copy(self.rel)
|
||||
memodict[id(self)] = obj
|
||||
return obj
|
||||
|
||||
def to_python(self, value):
|
||||
"""
|
||||
Converts the input value into the expected Python data type, raising
|
||||
@@ -145,11 +163,10 @@ class Field(object):
|
||||
# mapped to one of the built-in Django field types. In this case, you
|
||||
# can implement db_type() instead of get_internal_type() to specify
|
||||
# exactly which wacky database column type you want to use.
|
||||
data_types = get_creation_module().DATA_TYPES
|
||||
internal_type = self.get_internal_type()
|
||||
if internal_type not in data_types:
|
||||
try:
|
||||
return get_creation_module().DATA_TYPES[self.get_internal_type()] % self.__dict__
|
||||
except KeyError:
|
||||
return None
|
||||
return data_types[internal_type] % self.__dict__
|
||||
|
||||
def validate_full(self, field_data, all_data):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user