Django中contenttype的应用

content_type表将app名称与其中的表的关系进行保存

通过下边的示例来理解content_type的具体应用:

models:

from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey,GenericRelation
# Create your models here.
class Food(models.Model):
    name = models.CharField(max_length=32)
    coupon = GenericRelation("Coupon")
class Cloth(models.Model):
    name = models.CharField(max_length=32)
    coupon = GenericRelation("Coupon")
class Coupon(models.Model):
    """
    id      food_id     cloth_id  ……
    1         null        null
    2           1         null
    """
    name = models.CharField("活动名称",max_length=64)
    brief = models.TextField(blank=True,null=True,verbose_name="优惠券介绍")
    content_type = models.ForeignKey(ContentType,blank=True,null=True) # 代表哪个app下的哪张表
    object_id = models.PositiveIntegerField("绑定商品",blank=True,null=True) # 代表哪张表中的对象id
    content_obj = GenericForeignKey("content_type","object_id") #不会生成额外的列

view:

from django.shortcuts import render,HttpResponse
from . import models

def test(request):

    # c = models.Cloth.objects.get(id=1)
    # models.Coupon.objects.create(name=‘优惠券‘,brief=‘100减10‘,content_obj=c) 

    # c = models.Cloth.objects.get(id=1)
    # models.Coupon.objects.create(name=‘优惠券‘,brief=‘200减30‘,content_obj=c)

    # 查看优惠券绑定的所有课程
    # c = models.Coupon.objects.get(id=1)
    # print(c.content_obj)

    # 查看该商品下的所有优惠券
    c = models.Cloth.objects.get(id=1)
    print(c.coupon.all())
    c2 = models.Cloth.objects.values(‘name‘,‘coupon__brief‘)
    print(c2)

    return HttpResponse(‘ok‘)
时间: 2024-10-07 16:06:29

Django中contenttype的应用的相关文章

转:django中session的实现机制

转:www.jianshu.com 要理解session,首先要搞清楚cookie的概念.由于http是无状态的,服务器不能记住用户的信息状态,因此若由同一个客户端发起的多条请求,服务器不能辨别这些请求来自哪个用户.http无状态的限制为web应用程序的设计带来了许多不便,购物网站中的"购物车"功能就是一个很好的例子,当用户把商品放进购物车后,客户端必须要保存购物车的状态,否则当用户下次浏览网站时,购物车拥有的商品状态便不复存在.客户端和服务器必须有通信的媒介,方便服务器追踪客户端的状

Django中视图总结[urls匹配,HttpRequest对象,HttpResponse对象,对象序列化接受及案例]

视图的功能: 接收请求,进行处理,返回应答. 视图返回的内容为: HttpResponse的对象或子对象 render 返回的是HttpResponse的对象 JsonResponse是HttpResponse的子类 HttpResponseRedirect也是HttpResonse的子类 redirect是HttpResponseRedirect的一个简写 总结:所以视图返回的内容一般为:render,redirect,JsonResponse,Httpresponse 定义视图函数分为两步

Django中的Ajax详解

AJAX(Asynchronous Javascript And XML)翻译成中文就是"异步Javascript和XML".即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML). 同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求:异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求.AJAX除了异步的特点外,还有一个就是:浏览器页面局部刷新:(这一特点给用户的感受是在不知不觉中完成请

Django的ContentType应用

ContentType实例提供的接口 1.ContentType.model_class() : 获取当前ContentType类型所代表的模型类 2.ContentType.get_object_for_this_type() : 使用当前ContentType类型所代表的模型类做一次get查询 ContentType管理器(manager)提供的接口 1.ContentType.objects.get_for_id() : 通过id寻找ContentType类型,这个跟传统的get方法的区别

Django之ContentType组件

一.需求 给商品创建优惠券: 看看下面表结构: class Food(models.Model): """ id name 1 面条 """ name = models.CharField(max_length=32) def __str__(self): return self.name class Fruit(models.Model): """ id name 1 苹果 """ n

【Django】ContentType组件

目录 理解 表结构 使用 @ 好,现在我们有这样一个需求,我们的商城里有很多的商品,然而节日要来了,我们要搞活动. 那么,我们就要设计优惠券,优惠券都有什么类型呢?满减的.折扣的.立减的.等等等... 我们对应着活动类型,对某类商品设计优惠卷,比如: 家电是一类商品.食物是一类商品,那么我们就可以设计家电折扣优惠券,以及食物满减优惠券等. 所以,我们一顺手,表结构就出来了: from django.db import models is_true = {'null': True, 'blank'

django 中下载文件与下载保存为excel

一.django 中下载文件 在实际的项目中很多时候需要用到下载功能,如导excel.pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍django中的文件下载. 1.前端 实现方式:a标签+响应头信息(当然你可以选择form实现) <div class="col-md-4"><a href="{% url 'download' %}" rel="external nofollow

跨域问题和django中实现跨域

跨域问题 1.同源策略(浏览器的安全功能): 请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同 2.CORS跨域资源共享 实现CORS通信的关键是服务器,只要服务器实现了CORS接口,就可以跨源通信 3.CORS请求分为简单请求和非简单请求 4.只要符合以下两个条件,就是简单请求,否则就是非简单请求 (1) 请求方法是以下三种方法之一: HEAD , GET ,POST (2)HTTP的头信息不超出以下几种字段: Accept, Accept-Language

Django中如何防范CSRF跨站点请求伪造***

CSRF概念 CSRF跨站点请求伪造(Cross-Site Request Forgery). ***者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了***者所期望的一个操作,比如以你的名义发送邮件.发消息,盗取你的账号,添加系统管理员,甚至于购买商品.虚拟货币转账等. CSRF***原理以及过程 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A: 2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功