Python 将InlineField添加到ClusterableModel不起作用
我有一个名为EventDetail的页面类,它依次保存多条消息(通过cronjob发送)。如以下文档所示: 问题是,我还希望能够在每条消息中附加几个文件。但是现在我不再上网页课了,我无法让它工作。我在其他论坛的帖子上读到,可以通过将应该容纳InlinePanel的模型制作成ClusterableModel来实现这一点,但我无法让它工作。进行此操作时,我在访问页面时得到以下信息:Python 将InlineField添加到ClusterableModel不起作用,python,django,wagtail,Python,Django,Wagtail,我有一个名为EventDetail的页面类,它依次保存多条消息(通过cronjob发送)。如以下文档所示: 问题是,我还希望能够在每条消息中附加几个文件。但是现在我不再上网页课了,我无法让它工作。我在其他论坛的帖子上读到,可以通过将应该容纳InlinePanel的模型制作成ClusterableModel来实现这一点,但我无法让它工作。进行此操作时,我在访问页面时得到以下信息: FieldError at /admin/message/eventdetailmessage/create/ Un
FieldError at /admin/message/eventdetailmessage/create/
Unknown field(s) (files) specified for EventDetailMessage
我的代码:
class Message(models.Model):
"""
An abstract model of messages connected to an eventdetail
"""
title = models.CharField(max_length=255, blank=True)
content = models.TextField()
send_time = models.DateTimeField(verbose_name=_("Message send time"))
sent = models.BooleanField(default=False)
@property
def edit_link(self):
return self.url_helper.get_action_url("edit", self.id)
@property
def delete_link(self):
return self.url_helper.get_action_url("delete", self.id)
@property
def create_link(self):
return f"{self.url_helper.get_action_url('create')}?id={self.event_detail.id}"
panels = [FieldPanel("title"), FieldPanel("content"), FieldPanel("send_time")]
class Meta:
abstract = True
class EventDetailMessage(ClusterableModel, Orderable, Message):
"""
The actual implementation. Done like this in case we want do use
wagtails built in functionality for creating on the fly.
"""
event_detail = ParentalKey(
EventDetail, on_delete=models.CASCADE, related_name="messages"
)
panels = [FieldPanel("event_detail"), InlinePanel("files")] + Message.panels
def __init__(self, *args, **kwargs):
from .wagtail_hooks import MessageDataAdmin
self.url_helper = MessageDataAdmin().url_helper
super().__init__(*args, **kwargs)
def __str__(self):
return self.title
class File(models.Model):
file = models.FileField()
message = ParentalKey(
EventDetailMessage, on_delete=models.CASCADE, related_name="files"
)
panels = [FieldPanel("file")]
我找到了!File类下的ParentalKey定义需要用引号定义,否则它将不起作用,它应该是这样的:
message = ParentalKey(
"message.EventDetailMessage", on_delete=models.CASCADE, related_name="files"
)
但是我仍然不确定这是为什么,有人能解释一下吗?在
EventDetailMessage
@Alex中没有定义文件,而是通过文件类上的相关名称定义的。我是不是误解了什么?