问题描述
我有一个自定义联系表单,我使用 sent_time
为其创建了一个 auto_Now_add
字段,以节省用户发送消息的时间。
我能够在管理面板的列表视图中列出所有信息,但是当我尝试输入特定消息时,我遇到了以下错误:
'sent_time' cannot be specified for GeneralContact model form as it is a non-editable field
我尝试将 ModelAdmin
中的字段设为只读导致了同样的错误
class GeneralContactAdmin(ModelAdmin):
"""
Admin model for general correspondence via
the main contact form on the information page
"""
model = GeneralContact
list_display = GeneralContact.__all__
search_fields = GeneralContact.__all__
readonly_fields = GeneralContact.__all__
ordering = ('-sent_time',)
list_filter = ('sent_time','has_response')
当然可以只显示,也许我在模型中做错了什么?
这是我用于联系模型的基本模型
class ContactFormBase(models.Model):
__all__ = (
'sent_time','sender_name','sender_email','sender_message','has_response','responded_on'
)
sent_time = models.DateTimeField(auto_Now_add=True)
sender_name = models.CharField()
sender_email = models.EmailField()
sender_message = models.TextField()
has_response = models.BooleanField(
default=False,help_text='Select whether this message has been replied to by an admin.',)
responded_on = models.DateTimeField(blank=True,null=True)
panels = [
FieldRowPanel([
FieldPanel('sender_name'),FieldPanel('sender_email'),]),FieldPanel('sent_time'),FieldPanel('sender_message'),FieldRowPanel([
FieldPanel('has_response'),FieldPanel('responded_on'),])
]
class Meta:
abstract = True
ordering = ['-sent_time',]
实际使用的类相当简单,也许需要在这里做些什么来允许显示只读字段?
class GeneralContact(ContactFormBase,models.Model):
panels = ContactFormBase.panels
class Meta:
verbose_name = 'General Contact Entry'
verbose_name_plural = 'General Contact Entries'
在列表视图中可以显示所有信息。在编辑视图中,理想情况下,有关消息和发件人的所有信息都将作为只读字段,并且管理员可以根据是否有人响应来更改 has_response
值。
我可以通过什么方式实现这一目标?
更新
看到 this Q&A 后,我已将 auto_Now_add
更改为使用 django.utils.timezone.Now
作为 sent_time
属性的默认值,并且生活似乎更好了,从问题开始的错误消失了,编辑视图完全加载。但是,现在所有字段都是可编辑的,这是不可取的。
查看 Wagtail 提供的 ModelAdmin
类,似乎 readonly_fields
不可用,并且可能只是同名 django 管理类的一个功能。所以我不确定在这里做什么。 Wagtails HelpPanel
类型的输出是我正在寻找的,我有一个想法用它来显示数据,但我不确定它是什么样子,甚至我不确定它是如何完成的我只是在学习 django 和 wagtail。
更新 2
尝试使用 HelpPanel
而不是 FieldPanel
以尝试显示值,但似乎 HelpPanel
没有检索属性值。检查 these docs 我看到没有提到像 djangos readonly_field
这样的东西,这证实了为什么我以前的一次尝试没有奏效,但我确实发现提到了 inspect_view_enabled
,它显示了这些值以只读方式,在尝试之后,它看起来非常像我试图获得它的方式,唉,没有任何可编辑的东西是有意义的,但我越来越接近了。
我想知道是否有一个好的解决方案是覆盖用于 GeneralContactAdmin
的视图或模板,但不确定这是否只是为一个类输出一些文本的正确方法。
一个更简单的解决方案是保留检查视图,只将 has_response
添加到编辑视图,但是两个视图,其中一个只是一个复选框,对 UX 来说并不好。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)