栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何仅在Django中将外键选择限制为相关对象

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何仅在Django中将外键选择限制为相关对象

我刚刚在Django文档中碰到

ForeignKey.limit_choices_to
。尚不确定这是如何工作的,但在这里可能是正确的事情。
ForeignKey.limit_choices_to
允许指定常量,可调用对象或Q对象以限制键的允许选择。常量在这里显然没有用,因为它对所涉及的对象一无所知。

使用可调用(函数或类方法或任何可调用对象)似乎更有希望。但是,仍然存在如何从HttpRequest对象访问必需信息的问题。使用线程本地存储可能是一种解决方案。

这对我有用:

我按照上面的链接中所述创建了一个中间件。它从请求的GET部分提取一个或多个参数,例如“ product = 1”,并将此信息存储在线程本地中。

接下来,模型中有一个类方法,该方法读取线程局部变量并返回ID列表以限制外键字段的选择。

@classmethoddef _product_list(cls):    """    return a list containing the one product_id contained in the request URL,    or a query containing all valid product_ids if not id present in URL    used to limit the choice of foreign key object to those related to the current product    """    id = threadlocals.get_current_product()    if id is not None:        return [id]    else:        return Product.objects.all().values('pk').query

重要的是,返回一个包含所有可能的ID的查询(如果未选择任何一个ID),以便正常的管理页面正常运行。

然后将外键字段声明为:

product = models.ForeignKey(    Product,    limit_choices_to={        id__in=baseModel._product_list,    },)

问题是您必须通过请求提供信息以限制选择。我在这里看不到访问“自我”的方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/398615.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号