Django admin禁用外键下拉但保留添加按钮旁边

Posted

技术标签:

【中文标题】Django admin禁用外键下拉但保留添加按钮旁边【英文标题】:Django admin disable foreign key drop down but keep add button next to it 【发布时间】:2018-06-04 04:45:33 【问题描述】:

我有一个这样的下拉菜单:

我希望禁用特定的外键,但希望“加号”按钮完好无损。这样在管理员中,用户只能添加值,但不能编辑或从列表中选择。

我想要add_only

【问题讨论】:

【参考方案1】:

您可以使用 Django 的管理选项来允许您可以查看/编辑/删除哪些模型字段:ModelAdmin Options

我相信你可以使用 list_editable 字段:

class MyModelAdmin(OrderedModelAdmin):
    list_display = ('foo_editable', 'bar_editable', 'publisher')
    list_editable = ['foo_editable',  'bar_editable',]

    def get_readonly_fields(self, request, obj=None):
        if obj:
            # obj is not None, so this is an edit
            return ['publisher',] # Return a list or tuple of readonly fields' names
        else: 
            # This is an addition
            return []

admin.site.register(MyModel, MyModelAdmin)

【讨论】:

感谢您的回答。对不起,如果我的问题不清楚。我想让该字段不可编辑和不可选择。但管理员应该可以添加“加号”,如图所示。 你能发布你的models.py代码吗?在上面查看我的更改 readonly_feild 选项对我有用,没有任何开销。但是,我想要“仅添加”。如果该字段是外键,它将在旁边显示一个带有加号的下拉菜单。我想禁用该下拉菜单并将加号按钮留在那里,以便管理员可以添加,但不能从下拉菜单中选择 感谢您的帮助。我最终使用 javascript 方式禁用选择下拉菜单。它有点像 hack。非常感谢。【参考方案2】:

我遇到了类似的问题 - 相关字段的下拉列表中的值太多,导致管理编辑页面加载速度非常慢(有时会导致超时)。但我仍然需要能够对外键字段进行操作。

您既可以禁用下拉菜单,也可以使用模型表单删除编辑按钮。

将外键字段设置为禁用。这将防止它被填充,并防止用户从下拉列表中手动选择。 将外键字段的小部件设置为can_change_related = False。这将删除编辑按钮。

代码如下:

class ModelA(models.Model):
    pass

class ModelB(models.Model):
    a_ref = models.ForeignKey(ModelA)

class ModelBAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['a_ref'].disabled = True
        self.fields['a_ref'].widget.can_change_related = False

    class Meta:
        model = ModelB
        fields = '__all__'

class ModelBAdmin(admin.ModelAdmin):
    form = ModelBAdminForm

您也可以使用can_add_related = False禁用创建按钮

而且,您可以通过使用self.fields['a_ref'].queryset = ModelB.obejcts.filter(...) 细化查询来减小下拉列表的大小

【讨论】:

谢谢。但是,这似乎不适用于 django 1.8,我无法进一步升级。那将是一项艰巨的任务。我的要求也发生了一些变化。所以还是谢谢

以上是关于Django admin禁用外键下拉但保留添加按钮旁边的主要内容,如果未能解决你的问题,请参考以下文章

Django Admin ForeignKey字段小部件选项和不一致的默认值

Django admin禁用编辑链接和添加删除操作

Django Admin-禁用编辑并删除特定模型的“保存”按钮

django admin中的外键表单字段

Django Admin Cookbook-20如何删除模型的“添加”/“删除”按钮

django admin 添加用户出现外键约束错误