Moved generic relations into django.contrib.contenttypes, since it depends on

that to work. Backwards incompatible change.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@5172 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2007-05-08 10:59:35 +00:00
parent 0839a0046a
commit 1c53661bd1
6 changed files with 13 additions and 12 deletions

View File

@ -241,14 +241,14 @@ def _get_sql_for_pending_references(model, pending_references):
def _get_many_to_many_sql_for_model(model): def _get_many_to_many_sql_for_model(model):
from django.db import backend, get_creation_module from django.db import backend, get_creation_module
from django.db.models import GenericRel from django.contrib.contenttypes import generic
data_types = get_creation_module().DATA_TYPES data_types = get_creation_module().DATA_TYPES
opts = model._meta opts = model._meta
final_output = [] final_output = []
for f in opts.many_to_many: for f in opts.many_to_many:
if not isinstance(f.rel, GenericRel): if not isinstance(f.rel, generic.GenericRel):
table_output = [style.SQL_KEYWORD('CREATE TABLE') + ' ' + \ table_output = [style.SQL_KEYWORD('CREATE TABLE') + ' ' + \
style.SQL_TABLE(backend.quote_name(f.m2m_db_table())) + ' ('] style.SQL_TABLE(backend.quote_name(f.m2m_db_table())) + ' (']
table_output.append(' %s %s %s,' % \ table_output.append(' %s %s %s,' % \

View File

@ -8,7 +8,6 @@ from django.db.models.manager import Manager
from django.db.models.base import Model, AdminOptions from django.db.models.base import Model, AdminOptions
from django.db.models.fields import * from django.db.models.fields import *
from django.db.models.fields.related import ForeignKey, OneToOneField, ManyToManyField, ManyToOneRel, ManyToManyRel, OneToOneRel, TABULAR, STACKED from django.db.models.fields.related import ForeignKey, OneToOneField, ManyToManyField, ManyToOneRel, ManyToManyRel, OneToOneRel, TABULAR, STACKED
from django.db.models.fields.generic import GenericRelation, GenericRel, GenericForeignKey
from django.db.models import signals from django.db.models import signals
from django.utils.functional import curry from django.utils.functional import curry
from django.utils.text import capfirst from django.utils.text import capfirst

View File

@ -1,9 +1,9 @@
from django.db import backend, connection, transaction from django.db import backend, connection, transaction
from django.db.models.fields import DateField, FieldDoesNotExist from django.db.models.fields import DateField, FieldDoesNotExist
from django.db.models.fields.generic import GenericRelation from django.db.models import signals, loading
from django.db.models import signals
from django.dispatch import dispatcher from django.dispatch import dispatcher
from django.utils.datastructures import SortedDict from django.utils.datastructures import SortedDict
from django.contrib.contenttypes import generic
import operator import operator
import re import re
@ -1041,7 +1041,7 @@ def delete_objects(seen_objs):
pk_list = [pk for pk,instance in seen_objs[cls]] pk_list = [pk for pk,instance in seen_objs[cls]]
for related in cls._meta.get_all_related_many_to_many_objects(): for related in cls._meta.get_all_related_many_to_many_objects():
if not isinstance(related.field, GenericRelation): if not isinstance(related.field, generic.GenericRelation):
for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE): for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE):
cursor.execute("DELETE FROM %s WHERE %s IN (%s)" % \ cursor.execute("DELETE FROM %s WHERE %s IN (%s)" % \
(qn(related.field.m2m_db_table()), (qn(related.field.m2m_db_table()),
@ -1049,7 +1049,7 @@ def delete_objects(seen_objs):
','.join(['%s' for pk in pk_list[offset:offset+GET_ITERATOR_CHUNK_SIZE]])), ','.join(['%s' for pk in pk_list[offset:offset+GET_ITERATOR_CHUNK_SIZE]])),
pk_list[offset:offset+GET_ITERATOR_CHUNK_SIZE]) pk_list[offset:offset+GET_ITERATOR_CHUNK_SIZE])
for f in cls._meta.many_to_many: for f in cls._meta.many_to_many:
if isinstance(f, GenericRelation): if isinstance(f, generic.GenericRelation):
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
query_extra = 'AND %s=%%s' % f.rel.to._meta.get_field(f.content_type_field_name).column query_extra = 'AND %s=%%s' % f.rel.to._meta.get_field(f.content_type_field_name).column
args_extra = [ContentType.objects.get_for_model(cls).id] args_extra = [ContentType.objects.get_for_model(cls).id]

View File

@ -11,6 +11,7 @@ from complete).
from django.db import models from django.db import models
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
class TaggedItem(models.Model): class TaggedItem(models.Model):
"""A tag on an item.""" """A tag on an item."""
@ -18,7 +19,7 @@ class TaggedItem(models.Model):
content_type = models.ForeignKey(ContentType) content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField() object_id = models.PositiveIntegerField()
content_object = models.GenericForeignKey() content_object = generic.GenericForeignKey()
class Meta: class Meta:
ordering = ["tag"] ordering = ["tag"]
@ -30,7 +31,7 @@ class Animal(models.Model):
common_name = models.CharField(maxlength=150) common_name = models.CharField(maxlength=150)
latin_name = models.CharField(maxlength=150) latin_name = models.CharField(maxlength=150)
tags = models.GenericRelation(TaggedItem) tags = generic.GenericRelation(TaggedItem)
def __str__(self): def __str__(self):
return self.common_name return self.common_name
@ -39,7 +40,7 @@ class Vegetable(models.Model):
name = models.CharField(maxlength=150) name = models.CharField(maxlength=150)
is_yucky = models.BooleanField(default=True) is_yucky = models.BooleanField(default=True)
tags = models.GenericRelation(TaggedItem) tags = generic.GenericRelation(TaggedItem)
def __str__(self): def __str__(self):
return self.name return self.name

View File

@ -6,6 +6,7 @@ This class sets up a model for each model field type
""" """
from django.db import models from django.db import models
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
# The following classes are for testing basic data # The following classes are for testing basic data
@ -80,7 +81,7 @@ class Tag(models.Model):
content_type = models.ForeignKey(ContentType) content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField() object_id = models.PositiveIntegerField()
content_object = models.GenericForeignKey() content_object = generic.GenericForeignKey()
class Meta: class Meta:
ordering = ["data"] ordering = ["data"]
@ -88,7 +89,7 @@ class Tag(models.Model):
class GenericData(models.Model): class GenericData(models.Model):
data = models.CharField(maxlength=30) data = models.CharField(maxlength=30)
tags = models.GenericRelation(Tag) tags = generic.GenericRelation(Tag)
# The following test classes are all for validation # The following test classes are all for validation
# of related objects; in particular, forward, backward, # of related objects; in particular, forward, backward,