django模型中contenttype通用关系的个人见解

到写博客时我对于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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值