到写博客时我对于contenttype还是一个模模糊糊的概念,这次博客帮助自己梳理一下思路吧,写的有问题的希望大佬指出
首先从官方文档上看了contenttype的通用关系的讲解,
首先其实contenttype的作用就是帮助将很多我们创建的model中的表对接起来,因为之前我们使用不论哪种外键Foreignkey,OneToOne都是一对多,多对一,或者一对一。但是这时候我们需要调用很多个模型中的数据就需要做大量的from XXX import XXX 的工作,所以就有了contenttype的出现。
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db import models
class TaggedItem(models.Model):
tag = models.SlugField()
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
def __str__(self):
return self.tag
这里引用官方文档的实例
from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.db import models
这里是调用contenttype以及通用关系中重要的GenericForeignkey
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
这里是将当前的models通过外键contenttype中,通过cententype连接其他的models。
object_id = models.PositiveIntegerField()
这是为当前模型提供一个字段储存想要与哪一个model相关的主键值。我自己还没有用到这个。。。或者是我的理解不够
最后一个gemericforeignkey
是content_type和object_id的组合,方便我们使用。
例如写入方式如下
#获取对应的博客
blog = Blog.objects.get(id=1)
#创建1条记录
view = ViewNum(content_object=blog, view_num=1)
view.save()
其实我自己的理解就是contenttype相当于一个中间表,也就是相当于中枢的东西,将我们创建的饿model中的app相互连接起来,想要使用调用时直接拿着当前表去中枢中查找就好,不用每一个都要去import调用。
因为自己是初学者,希望有理解不对的地方可以指出来。谢谢各位
引用"http://yshblog.com/blog/159"
“https://docs.djangoproject.com/zh-hans/2.1/ref/contrib/contenttypes/”