首页 > 解决方案 > 在 Wagtail 中使用 InlinePanel 创建模型实例

问题描述

您知道如何使用 InlinePanel 创建模型的实例吗?我不想添加现有的实例,但我想创建一个新实例以及ParentalKey

在我的情况下,ParentalKey是家庭,人是ForeignKey 这里关于 wagtail InlinePanel 的文档

@register_snippet
class Family(ClusterableModel):
    title = models.CharField(verbose_name=_("family title"), max_length=100)
    panels = Page.content_panels + [        
        InlinePanel("persons", label=_("Persons")),
    ]

class FamilyPerson(Orderable):
    person = models.ForeignKey("crm.Person", on_delete=models.CASCADE)
    family = ParentalKey(
        "crm.Family", on_delete=models.CASCADE, related_name="persons"
    )


@register_snippet
class Person(models.Model):
    SEX_CHOICES = [("M", _("Male")), ("F", _("Female"))]
    title = models.CharField(verbose_name=_("person title"), max_length=100)
    age = models.PositiveIntegerField(
        verbose_name=_("age")
    )
    sex = models.CharField(
        max_length=12, choices=SEX_CHOICES
    )

标签: pythondjangopython-3.xwagtail

解决方案


我找到了解决方案:

@register_snippet
class Family(ClusterableModel):
    title = models.CharField(verbose_name=_("family title"), max_length=100)
    panels = Page.content_panels + [        
        InlinePanel("persons", label=_("Persons")),
    ]

class Person(Orderable):
    family = ParentalKey(
        "crm.Family", on_delete=models.CASCADE, related_name="persons"
    )
    SEX_CHOICES = [("M", _("Male")), ("F", _("Female"))]
    title = models.CharField(verbose_name=_("person title"), max_length=100)
    age = models.PositiveIntegerField(
        verbose_name=_("age")
    )
    sex = models.CharField(
        max_length=12, choices=SEX_CHOICES


这就对了!我只是把它复杂化了,它是如此简单


推荐阅读