如何在管理页面上使用RadioSelect在Wagtail中制作ManyToOne?

时间:2019-05-09 09:53:16

标签: django django-models wagtail wagtail-snippet

我想在admin中为我的博客类别设置一个单选选项。 ManyToMany字段不适用于RadioSelect小部件。

我希望类别与文章之间是ManyToOne关系。现在,我有一个ParentalManyToMany字段,并为博客类别注册了代码段。

class BlogPage(Page):
    ...
    category = ParentalManyToManyField('blog.ArticleCategory', blank=True)
    ...


@register_snippet
class ArticleCategory(models.Model):
    name = models.CharField(max_length=255)
    slug = models.SlugField(unique=True, max_length=80)

    panels = [
        FieldPanel('name'),
        FieldPanel('slug'),
    ]

    def __str__(self):
        return self.name

我不知道如何将其更改为ManyToOne选项,因此我可以使用单选而不是CheckboxSelectMultiple。

我们将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

多对一关系是ForeignKey字段。这些默认情况下将使用选择下拉列表作为表单字段,但是您可以通过在widget上传递FieldPanel参数来覆盖此字段:

from django import forms

class BlogPage(Page):
    ...
    category = models.ForeignKey('blog.ArticleCategory', null=True, blank=True, on_delete=models.SET_NULL)

    content_panels = [
       ...
       FieldPanel('category', widget=forms.RadioSelect),
    ]