我有一个场景,我想让用户在Django中管理他们的联系信息。
现在,我的模型看起来像这样:
class ContactInfo(models.Model):
phone = models.CharField(max_length=40, default='', help_text='The contact phone number used on the website.', blank=True)
email = models.CharField(max_length=200, default='', help_text='The contact email address to use on the website.', blank=True)
class Meta:
verbose_name_plural = "Contact Info"
def __str__(self):
return "Website Contact Info"
这是做什么的,它创建了一个名为ContactInfo
的类,Django管理员给了我选项" Add"尽可能多的ContactInfo
个对象。
我想要的是是Django Admin中的单一地点来编辑 Only ContactInfo 对象,我可以点击"联系信息"弹出一个表格,能够编辑/保存联系信息,并且无法添加"添加"一百个"联系"对象。
到目前为止,我的解决方案只是禁用"添加"管理员中的按钮使用以下内容:
class ContactAdmin(admin.ModelAdmin):
# Disable the Add Button in the admin
def has_add_permission(self, request):
return False
这有效,但这仍然需要我去"两个级别"深入管理员只是为了获得我可以编辑信息的表单。
必须有更好的方法来管理这个,有人能给我一些建议吗?我很感激。
更新:用户@GwynBleidD建议list_editable
和删除list_display_links
的组合,对于小型数据集(如联系信息)效果很好(谢谢!),因为它让我可以在下一次编辑数据"点击"在管理员中(所以我不必去"两个级别深度"只是为了获取数据)。但我正在寻找一种可扩展的解决方案,可以很好地满足小型或大型数据集的需求。
答案 0 :(得分:0)
您可以将每个表单字段划分为数据库中的单独行,因此您的模型将包含3个字段:字段名称,字段类型和已保存数据(最有可能在PostgreSQL中JSONField
或某种类型的序列化在{ {1}}灵活性)。您可以布置这些字段,使它们看起来像是详细视图。
如果需要,它将需要一些javascript来根据字段类型切换表单字段并在保存时序列化数据。
答案 1 :(得分:0)
您只需将用户从列表视图重定向到列表中第一个元素的详细视图即可。它甚至不需要在管理员中修改任何内容,只需创建单独的视图,将用户重定向到页面并注册在通常由列表视图占用的URL上。请记住,您的观点必须在django admin。
之前在urls.py
中注册
答案 2 :(得分:0)
其中一个解决方案是创建完全自定义的视图,只需将其设置为管理网站或修改display: block
,以便它符合您的要求。