如何在ViUR中通过代码为relationalbone添加新条目
向ViUR框架RelationalBone添加新条目的实现方法
RelationalBone是ViUR核心框架中用于管理跨模块关联关系的字段类型,通过后端Python代码添加关联条目可按以下步骤操作:
- 第一步:确认关联双方的Skeleton定义
首先确保你已经在对应模块中正确声明了带RelationalBone的Skel结构,参考示例:from viur.core.skeleton import Skeleton, RelationalBone, StringBone # 被关联的目标Skeleton,例如分类模块 class CategorySkel(Skeleton): name = StringBone(required=True) # 包含RelationalBone的源Skeleton,例如文章模块 class ArticleSkel(Skeleton): title = StringBone(required=True) # 关联到category模块的Skel,允许多选 related_category = RelationalBone(kind="category", multiple=True) - 第二步:后端代码新增关联条目
如果要给已有条目新增关联对象,直接操作对应RelationalBone字段赋值即可,支持单次添加单个或多个关联对象:# 1. 获取要添加关联的源条目实例 article_skel = ArticleSkel().fromDB("your-article-entry-key") # 2. 获取要关联的目标条目key(支持Key对象或字符串格式key) new_category_key = CategorySkel().all().filter("name =", "技术教程").getKey() # 3. 给RelationalBone添加新关联条目(multiple=True的字段为列表格式) if new_category_key not in article_skel["related_category"]: article_skel["related_category"].append(new_category_key) # 4. 保存更改即可完成新增 article_skel.toDB() - 常见注意事项
- 如果RelationalBone设置了
multiple=False,直接赋值为目标条目key即可,不需要调用append方法 - 赋值时可以直接传入目标Skeleton实例、Key对象或者合法的字符串格式条目key,框架会自动转换
- 如果需要同时给RelationalBone的
refKeys属性赋值额外关联字段,赋值时传入字典格式即可:article_skel["related_category"] = { "key": new_category_key, "custom_ref_field": "自定义关联属性值" }
- 如果RelationalBone设置了
内容的提问来源于stack exchange,提问作者Roberto Brink
相关产品推荐
相关产品推荐

