mirror of
https://github.com/django/django.git
synced 2025-06-29 15:29:13 +00:00
magic-removal:Move some field specific stuff out of the options preparation.
git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@1750 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
050351c339
commit
f7c5321964
@ -339,6 +339,12 @@ class AutoField(Field):
|
|||||||
return None
|
return None
|
||||||
return Field.get_manipulator_new_data(self, new_data, rel)
|
return Field.get_manipulator_new_data(self, new_data, rel)
|
||||||
|
|
||||||
|
def contribute_to_class(self, cls, name):
|
||||||
|
if cls._meta.has_auto_field:
|
||||||
|
raise AssertionError, "A model can't have more than one AutoField."
|
||||||
|
super(AutoField, self).contribute_to_class(cls, name)
|
||||||
|
cls._meta.has_auto_field = True
|
||||||
|
|
||||||
class BooleanField(Field):
|
class BooleanField(Field):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
kwargs['blank'] = True
|
kwargs['blank'] = True
|
||||||
|
@ -197,7 +197,8 @@ class OneToOneField(SharedMethods, IntegerField):
|
|||||||
setattr(cls, 'get_%s' % rel_obj_name,
|
setattr(cls, 'get_%s' % rel_obj_name,
|
||||||
curry(cls._get_related, method_name='get_object',
|
curry(cls._get_related, method_name='get_object',
|
||||||
rel_class=related.model, rel_field=related.field))
|
rel_class=related.model, rel_field=related.field))
|
||||||
|
if not cls._meta.one_to_one_field:
|
||||||
|
cls._meta.one_to_one_field = self
|
||||||
|
|
||||||
class ManyToManyField(RelatedField, Field):
|
class ManyToManyField(RelatedField, Field):
|
||||||
def __init__(self, to, **kwargs):
|
def __init__(self, to, **kwargs):
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from django.db.models.related import RelatedObject
|
from django.db.models.related import RelatedObject
|
||||||
from django.db.models.fields.related import OneToOne, ManyToMany
|
from django.db.models.fields.related import ManyToMany
|
||||||
from django.db.models.fields import AutoField
|
from django.db.models.fields import AutoField
|
||||||
from django.db.models.loading import get_installed_model_modules
|
from django.db.models.loading import get_installed_model_modules
|
||||||
from django.db.models.query import orderlist2sql
|
from django.db.models.query import orderlist2sql
|
||||||
@ -33,7 +33,11 @@ class Options:
|
|||||||
self.order_with_respect_to = None
|
self.order_with_respect_to = None
|
||||||
self.module_constants = {}
|
self.module_constants = {}
|
||||||
self.admin = None
|
self.admin = None
|
||||||
|
|
||||||
self.meta = meta
|
self.meta = meta
|
||||||
|
self.pk = None
|
||||||
|
self.has_auto_field = False
|
||||||
|
self.one_to_one_field = None
|
||||||
|
|
||||||
def merge_meta(self):
|
def merge_meta(self):
|
||||||
meta_attrs = self.meta.__dict__
|
meta_attrs = self.meta.__dict__
|
||||||
@ -63,34 +67,11 @@ class Options:
|
|||||||
else:
|
else:
|
||||||
self.order_with_respect_to = None
|
self.order_with_respect_to = None
|
||||||
|
|
||||||
# Calculate one_to_one_field.
|
|
||||||
self.one_to_one_field = None
|
|
||||||
for f in self.fields:
|
|
||||||
if isinstance(f.rel, OneToOne):
|
|
||||||
self.one_to_one_field = f
|
|
||||||
break
|
|
||||||
# Cache the primary-key field.
|
|
||||||
self.pk = None
|
|
||||||
for f in self.fields:
|
|
||||||
if f.primary_key:
|
|
||||||
self.pk = f
|
|
||||||
break
|
|
||||||
# If a primary_key field hasn't been specified, add an
|
|
||||||
# auto-incrementing primary-key ID field automatically.
|
|
||||||
if self.pk is None:
|
if self.pk is None:
|
||||||
auto = AutoField(verbose_name='ID', primary_key=True)
|
auto = AutoField(verbose_name='ID', primary_key=True)
|
||||||
auto.creation_counter = -1
|
auto.creation_counter = -1
|
||||||
model.add_to_class('id', auto)
|
model.add_to_class('id', auto)
|
||||||
self.pk = self.fields[0]
|
|
||||||
# Cache whether this has an AutoField.
|
|
||||||
self.has_auto_field = False
|
|
||||||
for f in self.fields:
|
|
||||||
is_auto = isinstance(f, AutoField)
|
|
||||||
if is_auto and self.has_auto_field:
|
|
||||||
raise AssertionError, "A model can't have more than one AutoField."
|
|
||||||
elif is_auto:
|
|
||||||
self.has_auto_field = True
|
|
||||||
#HACK
|
|
||||||
self.limit_choices_to = {}
|
self.limit_choices_to = {}
|
||||||
|
|
||||||
# If the db_table wasn't provided, use the app_label + module_name.
|
# If the db_table wasn't provided, use the app_label + module_name.
|
||||||
@ -105,6 +86,8 @@ class Options:
|
|||||||
self.many_to_many.insert(bisect(self.many_to_many, field), field)
|
self.many_to_many.insert(bisect(self.many_to_many, field), field)
|
||||||
else:
|
else:
|
||||||
self.fields.insert(bisect(self.fields, field), field)
|
self.fields.insert(bisect(self.fields, field), field)
|
||||||
|
if not self.pk and field.primary_key:
|
||||||
|
self.pk = field
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '<Options for %s>' % self.module_name
|
return '<Options for %s>' % self.module_name
|
||||||
|
Loading…
x
Reference in New Issue
Block a user