You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Django数据库中获取Product模型的特定dataset_id值?

解决Django中访问模型类字段而非实例值导致的DeferredAttribute问题

你遇到的问题核心是直接访问了模型类的字段定义,而不是具体商品实例的字段值,所以才会打印出DeferredAttribute对象,而不是预期的31。

问题原因

Product.dataset_id是在访问Product这个模型类的字段属性,它只是Django用来描述字段的元数据对象(DeferredAttribute负责字段的延迟加载逻辑),并不是某个具体商品记录里存储的实际数值。你需要先获取到选中的Pizza对应的Product实例,再访问这个实例的dataset_id属性才能拿到正确的数值。

解决方案

修改你的views.py代码,先获取目标商品的实例,再提取dataset_id:

from .models import Product
def cart(request):
    if request.user.is_authenticated:
        try:
            # 获取名为Pizza的Product实例
            selected_product = Product.objects.get(food_name="Pizza")
            # 从实例中获取实际的dataset_id值
            target_dataset_id = selected_product.dataset_id
            print(target_dataset_id)  # 现在会输出预期的31
            
            # 将正确的id传入recommend函数
            res = recommend(item_id=target_dataset_id, num=3)
        except Product.DoesNotExist:
            # 处理找不到Pizza商品的情况,避免程序崩溃
            res = []
            print("未找到名为Pizza的商品记录")
        
        customer = request.user.customer
        order, created = Order.objects.get_or_create(customer=customer, complete=False)
        items = order.orderitem_set.all()
        cartItems = order.get_cart_items
        print(res)

额外提示

  • 如果是前端用户动态选择的商品(不是固定的Pizza),你需要从请求中获取标识商品的参数(比如request.GET.get('food_id')或者request.POST.get('food_name')),再用这个参数去查询对应的Product实例,而不是硬编码food_name="Pizza"。
  • 一定要加上try-except捕获Product.DoesNotExist异常,防止因为数据库中没有对应商品记录导致程序抛出错误。

内容的提问来源于stack exchange,提问作者Radon333

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:23:09