ORM创建模型

ORM创建模型

1、这个两个库的作用是什么?

https://img1.sycdn.imooc.com/climg/661cd84b09d8f9bb18920410.jpg

2、Order模型中related_name是什么意思?之前将Django的时候好像是说反向引用,是关联User中orders字段吗?但感觉好像不对

https://img1.sycdn.imooc.com/climg/661cd912093fdc5716340361.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小猿 2024-04-15 17:40:38

同学,你好!1、GenericForeignKey 是 Django 中的一个特殊字段,它允许任何模型与其他模型之间建立关联,而不需要提前定义这些关联。其作用是在数据库中创建通用外键(generic foreign key)。

ContentType 模型在 Django 中用于存储模型的元数据信息,其作用是能够动态地查找、创建和管理所有已注册的模型。通过 ContentType,可以获取有关已定义模型的信息,如模型的名称、表名以及与之相关的其它数据。


2、related_name 是 ForeignKey 或者 ManyToManyField 中的一个参数,它定义了反向关联的名称。当一个模型中定义一个外键或者多对多关系时,Django 会自动创建反向关联的属性,而 related_name 是指定这个反向关联的属性名。

如在 Order 模型中,定义了一个外键指向 User 模型,并且使用了 related_name='orders'。我们可以通过 User 模型来访问订单,反向查询将使用 'orders' 作为属性名。

如果有一个用户实例 user,可以使用 user.orders.all() 来获取与该用户相关的所有订单。

# 导入必要模块
from app.models import User, Order

# 假设 user_id 是一个用户的 ID
user_id = 1

# 获取指定用户的所有订单
user = User.objects.get(id=user_id)
orders = user.orders.all()

# 打印订单信息
for order in orders:
    print(order.sn)  # 输出订单编号

祝学习愉快~

  • 提问者 慕九州ing #1

    那related_query_name应该怎么理解?

    2024-04-15 18:01:23
  • 好帮手慕小猿 回复 提问者 慕九州ing #2

    同学,你好!related_query_name 定义的属性名是用来进行反向查询,可以通过定义的属性名来反向查询

    以order、user两个model 为例:Order 中分别定义related_name、related_query_name属性

    class Order(CommonModel):
        """订单"""
        sn = models.CharField('订单编号', max_length=32)
        user = models.ForeignKey(User, related_name='orders', related_query_name="qn",on_delete=models.PROTECT)
        buy_count = models.IntegerField('购买数量', default=1)
        buy_amount = models.FloatField('总价')
    
        class Meta:
            db_table = 'order'
    与class User(AbstractUser):
        """用户模型"""
        # 添加字段
        avatar = models.ImageField('用户头像', upload_to='avatar/%Y%m%d', null=True, blank=True)
        nickname = models.CharField('昵称', max_length=32, unique=True)
    
        class Meta:
            db_table = 'account_user'

    related_name="orders"可以使用user.orders.all()获取用户的所有订单。

    related_query_name="qn"可以使用User.objects.filter(qn__buy_amount=666),查询buy_amount 值为666的所有用户,这样的反向查询。

    祝学习愉快~

    2024-04-15 21:52:45
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师