1

我有一个课程模型,选项为 ClusterableModel 和 Staff。员工与课程模型相关,员工可以选择选项。我以前用普通的 django 做过类似的事情,但我似乎不知道如何用 Wagtail 做这件事。该选项在课程页面上正常显示,但在员工选项卡上为空。这是我的模型:

class Option(models.Model):
    name = models.CharField(max_length=255)
    desc = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        abstract = True

    def __str__(self):
        return self.name

    def save(self, force_insert=False, force_update=False, using=None,
         update_fields=None):
        self.tajuk = self.name.title()

    content_panels = [
        FieldPanel('name'),
        FieldPanel('desc')
    ]


class OptionPage(Orderable, Option):
    page = ParentalKey("Course", related_name='course_option')


class Staf(Orderable):
    page = ParentalKey('course.Course', related_name='pcourse')
    jxr = models.ForeignKey('jxr.Staf',
                        null=True,
                        blank=True,
                        on_delete=models.PROTECT,
                        related_name='+'
                        )

    vegetarian = models.BooleanField(default=False)
    attend = models.BooleanField(default=False)
    reason = models.CharField(max_length=255, blank=True, null=True)
    replacement = models.ForeignKey('jxr.Staf',
                              null=True,
                              blank=True,
                              on_delete=models.PROTECT,
                              related_name='+'
                              )
    option = models.ForeignKey(OptionPage,blank=True, null=True)
    class Meta:
        verbose_name_plural = 'Staf'

    panels = [
        FieldPanel('jxr'),
        FieldPanel('vegetarian'),
        FieldPanel('option'),
        FieldPanel('attend'),
        FieldPanel('reason'),
        FieldPanel('replacement'),
]

class Course(Page):
    tags = ClusterTaggableManager(through=CourseTag, blank=True)
    picture = models.ForeignKey(
        'wagtailimages.Image',
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+'
    )
    State = models.ForeignKey(State, default=1,
                           related_name='+',
                           on_delete=models.PROTECT,
                           )
    location = RichTextField()
    start =  models.DateTimeField("Start",default=timezone.now)
    end = models.DateTimeField("End", default=timezone.now)
    max_staf = models.PositiveIntegerField(default=1)
    intro = StreamField(CourseBlock())
    status = models.CharField(max_length=30, choices=STATUS_KURSUS)

search_fields = Page.search_fields + [
    index.SearchField('title'),
    index.SearchField('intro')]

parent_page_types =['course.CourseIndex']
subpage_types=[]

content_panels = [
    FieldPanel('title', classname="full title"),
    MultiFieldPanel([
        InlinePanel('kat_kursus', label='Category'),
        FieldPanel('tags'),
        InlinePanel('course_option', label='Options')
    ]),
    ImageChooserPanel('picture'),
    FieldPanel('state'),
    FieldPanel('location'),
    FieldPanel('start'),
    FieldPanel('end'),
    FieldPanel('max_staf'),
    StreamFieldPanel('intro'),
    FieldPanel('status'),
]
staf_panel = [
    InlinePanel('pkursus', label='Staf')
]

edit_handler = TabbedInterface([
        ObjectList(content_panels, heading='Content'),
        ObjectList(staf_panel, heading='Staf'),
        ObjectList(Page.promote_panels, heading='Promote'),
        ObjectList(Page.settings_panels, heading='Settings', classname="settings"),
    ])
4

0 回答 0