******

Django的contenttype表中存放发的是app名称和模型的对应关系

contentType使用方式
    - 导入模块
        from django.contrib.contenttypes.models import ContentType
        from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
    - 定义models
        class PythonBasic(models.Model):
            course_name = models.CharField(max_length=32)
​
​
        class Oop(models.Model):
            course_name = models.CharField(max_length=32)
​
​
        class Coupon(models.Model):
            coupon_name = models.CharField(max_length=32)
            # 关联到contenttype外键,用来存放对应的表的id(在contenttype表中的id)
            content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
            # 关联对应的商品的id
            object_id = models.PositiveIntegerField()
            # 关联的对象商品
            content_object = GenericForeignKey("content_type", "object_id")
    - 使用
        class CourseView(APIView):
            def get(self, request):
                pb = ContentType.objects.get(app_label="myapp", model="pythonbasic")
                # model_class()获取对应的表类
                object_id = pb.model_class().objects.get(pk=3)
                # 其中的关系我们可以使用content_object进行关联,它相当于一个管理器
                # 我们将对应的对象给他,他会自动给字段建立关系
                # 但是其实我对于它的应用了解还不是很多,如果需要请看django文档
                Coupon.objects.create(coupon_name="python通关优惠券", content_object=object_id)
                return HttpResponse("ok")
   总结:
    关于它的使用时机,其实就是如果一个模型类与多个类之间都存在外键关系的时候。比如订单表与书籍表以及衣服表,都会产生订单,但是万一还有其他类的商品也要关联订单的时候,我们可以使用,contentType进行关联。其实就是一个万能的中间表,可以关联任何的其他表。
 

View Code