中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django中ContentType組件怎么用

發布時間:2021-12-06 16:05:01 來源:億速云 閱讀:149 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Django中ContentType組件怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

問題

如何在一張表上對多個表進行外鍵關聯

from django.db import models
class Appliance(models.Model):
    """
    家用電器表
    id name
    1   冰箱
    2   電視
    3   洗衣機
    """
    name = models.CharField(max_length=64)
class Food(models.Model):
    """
    食物表
    id name
    1  面包
    2  牛奶
    """
    name = models.CharField(max_length=32)
class Fruit(models.Model):
    """
    水果表
    id  name
    1   蘋果
    2   香蕉
    """
    name = models.CharField(max_length=32)
class Coupon(models.Model):
    """
    優惠券表
    id  name    appliance_id    food_id     fruit_id
    1   通用優惠券   null            null        null
    2   冰箱折扣券   1               null        null
    3   電視折扣券   2               null        null
    4   蘋果滿減卷   null            null        1
    """
    name = models.CharField(max_length=32)
    appliance = models.ForeignKey(to="Appliance", null=True, blank=True)
    food = models.ForeignKey(to="Food", null=True, blank=True)
    fruit = models.ForeignKey(to="Fruit", null=True, blank=True)

注意

1.每增加一張表就需要多增加一個字段,

定義

當一張表要跟多張表進行外鍵關聯的時候,我們可以使用Django提供的ContentType 組件

ContentTypes是Django內置的一個組件,可以追蹤項目中所有app和model的對應關系,并記錄在ContentType表中

app1/models.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation

class Food(models.Model):
    """
    id      title
    1       面包
    2       牛奶
    """
    title = models.CharField(max_length=32)
    # 不會生成coupons字段,只用于反向查詢
    coupons = GenericRelation(to="Coupon")

class Fruit(models.Model):
    """
    id      title
    1       蘋果
    2       香蕉
    """
    title = models.CharField(max_length=32)

class Coupon(models.Model):
    title = models.CharField(max_length=32)
    # 第一步:在 model中定義ForeignKey字段,并關聯到ContentType表
    content_type = models.ForeignKey(to=ContentType, on_delete=None)
    # 第二步:定義IntegerField字段,用來存儲關聯表中的主鍵
    object_id = models.IntegerField()
    # 第三步 不會生成字段傳入上面兩個字段的名字
    content_object = GenericForeignKey("content_type", "object_id")

app1\view.py

class DemoView(APIView):
    def get(self, request):
        # 1.通過ContentType表找表模型
        content = ContentType.objects.filter(app_label="app1", model="food").first()
        # 獲得表model對象 相當于models.app1
        model_class = content.model_class()
        ret = model_class.objects.all()
        print(ret)
        # 給面包創建一個優惠券
        food_obj = Food.objects.filter(id=1).first()
        Coupon.objects.create(title="面包九五折", content_type_id=8, object_id=1)
        Coupon.objects.create(title="雙十一面包九折促銷", content_object=food_obj)
        # 正向查詢:根據優惠信息查詢優惠對象
        coupon_obj = Coupon.objects.filter(id=1).first()
        content_obj = coupon_obj.content_object
        print(content_obj.title)
        # 反向查詢:查詢面包都有哪些優惠券
        coupons = food_obj.coupons.all()
        print(coupons[0].title)
        # 如果沒定義反向查詢
        content = ContentType.objects.filter(app_label="app1", model="food").first()
        result = Coupon.objects.filter(content_type=content, object_id=1).all()
        print(result[0].name)
        return Response("ContentType測試")

關于“Django中ContentType組件怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

交口县| 洪洞县| 全州县| 衡东县| 潼关县| 大同市| 大城县| 梅河口市| 南丰县| 禄劝| 临夏市| 尤溪县| 天津市| 三亚市| 泽普县| 万宁市| 化德县| 绥阳县| 晋城| 株洲市| 德惠市| 从江县| 高清| 大丰市| 桐梓县| 革吉县| 柏乡县| 开原市| 庄河市| 桃园县| 林芝县| 南川市| 芦溪县| 抚松县| 秦安县| 蒙自县| 东平县| 青浦区| 同心县| 安福县| 南宫市|