что означает этот тип содержимого - PullRequest
0 голосов
/ 06 апреля 2010
content_type = ContentType.objects.get_for_model(Map)

    maps = maps.extra(select=SortedDict([
        ('member_count', MEMBER_COUNT_SQL),
        ('topic_count', TOPIC_COUNT_SQL),
    ]), select_params=(content_type.id,))

и ContentType:

class ContentType(models.Model):
    name = models.CharField(max_length=100)
    app_label = models.CharField(max_length=100)
    model = models.CharField(_('python model class name'), max_length=100)
    objects = ContentTypeManager()

    class Meta:
        verbose_name = _('content type')
        verbose_name_plural = _('content types')
        db_table = 'django_content_type'
        ordering = ('name',)
        unique_together = (('app_label', 'model'),)

    def __unicode__(self):
        return self.name

    def model_class(self):
        "Returns the Python model class for this type of content."
        from django.db import models
        return models.get_model(self.app_label, self.model)

    def get_object_for_this_type(self, **kwargs):
        """
        Returns an object of this type for the keyword arguments given.
        Basically, this is a proxy around this object_type's get_object() model
        method. The ObjectNotExist exception, if thrown, will not be caught,
        so code that calls this method should catch it.
        """
        return self.model_class()._default_manager.using(self._state.db).get(**kwargs)

    def natural_key(self):
        return (self.app_label, self.model)

я хочу знать: для чего используется 'content_type' ??

Ответы [ 2 ]

2 голосов
/ 06 апреля 2010

Используется для родовых отношений , между прочим.

1 голос
/ 07 апреля 2010

ContentType используется, если, скажем, вы хотите использовать модель, к которой многие разные модели имеют внешний ключ, и сможете получить их все в одном запросе.

Например: у вас есть модель города, модель ресторана и модель паба.

Для получения всех ресторанов и пабов в городе потребуется 2 запроса

city.restaurant_set.all()
city.pub_set.all()

Используя общие внешние ключи, вы можете сделать это одним запросом, как вы можете проверить из документации: http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#ref-contrib-contenttypes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...