w页面模型与其自身之间的多对多关系? [英] many-to-many relationship of wagtail page model to itself?
问题描述
因此,我得到了一个带有"companion"字段的PlantDetailPage模型(是的,植物可以是同伴),在其中我应该能够选择其他PlantDetailPages.我得到了显示的内容,以内联方式创建新工厂(是的,在菜单的菜单中有一个菜单...),但是有几个问题:
So i got a PlantDetailPage model with "companion" field among others (yes plants can be companions), in which I should be able to select other PlantDetailPages. I got the thing to show up, create new plants in inline (yes, a menu in the menu in the menu...), but there's few issues:
1)只是不会选择它们(点击选择plantdetailpage"没有任何作用)
1) It just won't select them (no action on clicking "select plantdetailpage")
2)伴侣"菜单按钮现在显示在左侧(就像它变成的摘要一样?)-我想避免这种情况.
2) "companions" menu button is now shown on the left (like a snippet that it became?) - which I'd like to avoid.
3)我不知道如何将伴随的内联选择器限制为仅选择而不创建更多PlantDetailPages(这样就不会递归窗口)?
3) I don't know how to limit the companion inline selector to only selecting and not creating more PlantDetailPages (so that there's no recursion of windows) ?
这是models.py中的模型:
Here's the model in models.py :
class PlantCompanion(ClusterableModel):
companion = models.ForeignKey(
"vegependium.PlantDetailPage", on_delete=models.SET_NULL, related_name="plants", null=True
)
plant = ParentalKey(
"vegependium.PlantDetailPage",
on_delete=models.SET_NULL,
related_name="companions",
null=True,
)
panels = [InstanceSelectorPanel("companion")]
class PlantDetailPage(Page):
genus_species = models.CharField(max_length=100, blank=False, null=False)
# soo many other fields
content_panels = Page.content_panels + [
#soo many other panels
FieldPanel("alternative_names")
],
heading=_("names")
),
MultiFieldPanel(heading=_("Companions"), children=[InlinePanel("companions")]),
#even more panels
]
def get_context(self, request):
context = super().get_context(request)
context["plant"] = self # needed?
# You always can access the page object via "page" or "self" in the template!
return context
以及在admin.py中:
and in admin.py :
class CompanionAdmin(ModelAdmin):
"""Modeladmin definitions for sompanions."""
model = PlantDetailPage
menu_label = _("Companions")
menu_icon = "snippet"
menu_order = 499 # defines the menu position (e.g. after "images")
add_to_settings_menu = False
exclude_from_explorer = True
list_filter = [] # list attributes with only few choices
list_display = [
"genus_species",
] # columns to show up in admin (including one dynamic column)
search_fields = ["genus_species"] # columns to search in
modeladmin_register(CompanionAdmin)
推荐答案
from modelcluster.fields import ParentalManyToManyField
class PlantPage(Page):
related_plants = ParentalManyToManyField('self', blank=True)
content_panels = Page.content_panels + [
FieldPanel('related_plants'),
]
这种关系是对称的,如果A与B有关,则B与A有关.
This relation is symmetric, if A is related to B, B is related to A.
文档 https://docs.wagtail.io/zh_CN/stable/getting_started/tutorial.html?highlight = ParentalManyToManyField 该示例使用复选框小部件.
Docs https://docs.wagtail.io/en/stable/getting_started/tutorial.html?highlight=ParentalManyToManyField The example uses a checkbox widget.
FieldPanel('categories', widget=forms.CheckboxSelectMultiple),
这篇关于w页面模型与其自身之间的多对多关系?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!