我有一个拥有大量模型和表格的django网站.我有许多自定义表单和表单集以及内联表单集和自定义验证以及自定义查询集.因此,添加模型操作取决于需要其他内容的表单,以及django管理员中的"添加模型",通过自定义查询集中的500.
无论如何要禁用某些型号的"添加$ MODEL"功能?
我想/admin/appname/modelname/add/
提供404(或合适的"消失"错误消息),我不希望"添加$ MODELNAME"按钮在/admin/appname/modelname
视图中.
Django admin提供了一种禁用管理操作的方法(http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions)但是此模型的唯一操作是"delete_selected".即管理操作仅对现有模型起作用.是否有一些django式的方式来做到这一点?
我在实现(可能)相当简单的任务时遇到了问题.我有完全可修改的模型(Prodotto,Comune),它们显示为"可添加"字段,如下图所示.我不想看到的是这些字段的+(添加)按钮,因此删除了这种形式的"可添加"的适当性.我已经尝试在两个模型中设置has_add_permission = False,但是这会使得完全向这些模型添加新对象变得不可能,不仅仅是以这种形式.
我怎样才能做到这一点?
编辑:为了澄清我的需要,我不希望在FK模型的字段旁边有"+",但我仍然希望能够添加全新的内联.尽可能清楚,正如我在评论中所写,考虑这样的场景:https://code.djangoproject.com/attachment/ticket/20367/django_custom_user_admin_form.png我只需要"+"s "组和国家/地区"旁边已删除
现有代码:
models.py(涉及的具体应用):
from django.db import models
from smart_selects.db_fields import ChainedForeignKey
from apps.comune.models import Comune, Cap
class Prodotto(models.Model):
SETTORE_CHOICES = (
('CAL', 'Accessori calzature'),
('ALI', 'Alimentari'),
('ARA', 'Arredamenti e accessori'),
('AEM', 'Auto e moto'),
('CAL', 'Calzature'),
('CEG', 'Cartaria e grafica'),
('CEP', 'Concerie e pelletterie'),
('EDI', 'Edilizia'),
('INV', 'Industrie varie'),
('IST', 'Istruzione'),
('MDC', 'Materiali da costruzione'),
('MMC', 'Metalmeccanica'),
('SEI', 'Serramenti e infissi'),
('STM', 'Strumenti musicali'),
('TEI', …
Run Code Online (Sandbox Code Playgroud) 我在模型中有一个外键,我正在管理端进行内联。我通过extra=0
只显示一种形式及其工作,但我正在进入Add another model
管理。
我不想Add another model
在管理员中只显示一种形式。
我怎样才能做到这一点 。如何从管理员中删除添加另一个选项
目标:创建和更新资源时,在django管理表单上显示特定user_id
于请求的只读信息。
此显示应该是一个只读字段(readonly,未禁用)。的user_id
显示被从请求用户派生(request.user
),以使初始值被从设置。
在这篇文章之后,我们应该get_form
像这样简单地在方法中进行设置:
def get_form(self, request, obj=None, *args, **kwargs):
form = super(ProfileAdmin, self).get_form(request, *args, **kwargs)
form.base_fields['user'].initial = request.user
return form
Run Code Online (Sandbox Code Playgroud)
但是,用户不再处于base_fields
只读状态。实际上,我在任何地方都找不到它。有什么想法吗?
其他帖子建议保存,我打算这样做,但在此之前我需要将其显示在表单上。