2010-04-06 168 views
-1
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的是:这是什么 'CONTENT_TYPE' 意味着

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' 使用?

+4

正如一个提示:阅读Django的文档。它非常好,涵盖了大部分问题。 – 2010-04-06 13:04:49

+1

你有什么问题?请偶尔阅读文档! – 2010-04-06 13:38:12

+0

你有什么问题?某某男孩? – zjm1126 2010-04-07 01:51:35

回答

1

ContentType用于其中,例如,您希望使用许多不同型号具有外键并且能够在单个查询中获得所有外键的模型。

例如:您有城市模型,也有餐厅模型和酒吧模型。

为了获得在这个城市的所有餐馆和酒吧将需要2个查询,

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

通过使用通用外键,你可以把它一个单一的查询,你可以从文档检查:http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#ref-contrib-contenttypes