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

Django问题:无法访问关联模型的inlineformset_factory字段

解决方案

首先你得明确RequestModel对应的关联子模型(就是你用inlineformset_factory生成表单集的那个模型,比如假设叫RequestItem),以及OfferModel对应的关联子模型(比如OfferItem,字段结构要和RequestItem匹配,且外键指向OfferModel)。

接下来修改你的视图函数,在创建OfferModel主实例后,遍历RequestModel的子模型数据,批量复制到OfferModel的子模型中:

def create_offer_button(request):
    if request.method == "POST":
        post_pk = request.POST.get("post_pk")
        request_obj = RequestModel.objects.get(pk=post_pk)
        if request_obj.is_accepted:
            # 创建主OfferModel实例
            offer_obj = OfferModel.objects.create(
                request_model_name=request_obj,
                request_title=request_obj.request_title,
                delivery_time=request_obj.delivery_time,
                shipping_country=request_obj.shipping_country,
                shipping_address=request_obj.shipping_address,
                preferred_currency=request_obj.preferred_currency,
                shipping_term=request_obj.shipping_term,
                delivery_term=request_obj.delivery_term
            )
            
            # 复制RequestModel的inline表单集关联数据(替换成你的实际子模型名)
            # 假设RequestModel的子模型是RequestItem,外键字段是request
            # OfferModel的子模型是OfferItem,外键字段是offer
            for request_item in request_obj.requestitem_set.all():
                OfferItem.objects.create(
                    offer=offer_obj,
                    # 按需复制子模型的字段,替换成你的实际字段
                    item_name=request_item.item_name,
                    quantity=request_item.quantity,
                    unit_price=request_item.unit_price
                    # 其他需要同步的字段...
                )
            
            request_obj.is_offer_created = True
            request_obj.save()
        return redirect(request.META.get("HTTP_REFERER"))

补充优化说明:

  • 如果子模型字段较多,可通过字典解包简化代码,避免逐个字段赋值:
    # 排除外键字段,复制其余字段
    item_data = {field.name: getattr(request_item, field.name) for field in RequestItem._meta.fields if field.name != "request"}
    OfferItem.objects.create(offer=offer_obj, **item_data)
    
  • 若关联的是多对多关系,需用add()方法批量添加关联数据,而非直接创建实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:05:16