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
相关产品推荐
相关产品推荐

