鹡鸰:流场值的外键
Wagtail: foreign key to streamfield value
我想允许 wagtail admin 中的下拉列表 select 来自另一个模型的流场中包含的值(块),这可能吗?我想象的是这样的:
Feedback(page):
paper = models.ForeignKey('PaperPage', on_delete=models.CASCADE, null=True, blank=False, help_text="The paper associated with this feedback. Auto assigned.")
content_panels = [
InlinePanel('paper__drafts_id', label='Draft') <--- this doesn't work
]
其中
Paper(page):
drafts = StreamField(
[
('draft_block', blocks.ListBlock(blocks.StructBlock([
('date', blocks.DateTimeBlock(required=True, label='Date draft uploaded')),
('uploaded_by', MemberBlock(required=False, label='Uploaded by',
help_text="Who is uploading this draft.")),
('draft_file', DocumentChooserBlock(required=False, label='Upload file')),
]), template='papers/blocks/drafts.html')),
],
blank=True
)
但我不确定这是否可能?任何建议将不胜感激。谢谢!
这是 StreamField
的缺点之一 - 数据不存储为 "true" 数据库对象,而仅存储为页面上的 JSON 文本,因此无法定义ForeignKey
s 等关系指向该数据中的各个项目。
如果流中只有一种块类型,如您的示例代码中所示,那么更适合将 'draft' 定义为子对象(带有 InlinePanel
)改为纸模型;然后它将作为真正的数据库模型存在。
我想允许 wagtail admin 中的下拉列表 select 来自另一个模型的流场中包含的值(块),这可能吗?我想象的是这样的:
Feedback(page):
paper = models.ForeignKey('PaperPage', on_delete=models.CASCADE, null=True, blank=False, help_text="The paper associated with this feedback. Auto assigned.")
content_panels = [
InlinePanel('paper__drafts_id', label='Draft') <--- this doesn't work
]
其中
Paper(page):
drafts = StreamField(
[
('draft_block', blocks.ListBlock(blocks.StructBlock([
('date', blocks.DateTimeBlock(required=True, label='Date draft uploaded')),
('uploaded_by', MemberBlock(required=False, label='Uploaded by',
help_text="Who is uploading this draft.")),
('draft_file', DocumentChooserBlock(required=False, label='Upload file')),
]), template='papers/blocks/drafts.html')),
],
blank=True
)
但我不确定这是否可能?任何建议将不胜感激。谢谢!
这是 StreamField
的缺点之一 - 数据不存储为 "true" 数据库对象,而仅存储为页面上的 JSON 文本,因此无法定义ForeignKey
s 等关系指向该数据中的各个项目。
如果流中只有一种块类型,如您的示例代码中所示,那么更适合将 'draft' 定义为子对象(带有 InlinePanel
)改为纸模型;然后它将作为真正的数据库模型存在。