Django admin disable foreign key(禁用外键)下拉列表,但保留旁边的add(添加)按钮

Django admin disable foreign key(禁用外键)下拉列表,但保留旁边的add(添加)按钮,django,python-3.x,django-admin,Django,Python 3.x,Django Admin,我有这样一个下拉列表: 我希望禁用特定的外键,但希望加号按钮完好无损。因此,在管理中,用户只能添加值,但不能编辑或从列表中选择 我想要一种类似“仅添加”的功能。您可以使用Django的管理选项来允许查看/编辑/删除哪些模型字段: 我相信您可以使用列表可编辑字段: class MyModelAdmin(OrderedModelAdmin): list_display = ('foo_editable', 'bar_editable', 'publisher') list_edita

我有这样一个下拉列表:

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


我想要一种类似“仅添加”的功能。

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

我相信您可以使用列表可编辑字段:

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)

我也有一个类似的问题-相关字段的下拉列表有太多的值,导致管理员编辑页面加载速度非常慢,有时会导致超时。但我仍然需要能够操作外键字段

您可以使用模型表单禁用下拉列表并删除编辑按钮

将外键字段设置为禁用。这将防止它被填充,并防止用户从下拉列表中手动选择。 将外键字段的小部件设置为can\u change\u 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\u create\u related=False禁用“创建”按钮


而且,您可以通过使用self.fields['a_ref'].queryset=ModelB.obejcts.filter…

优化查询来减小下拉列表的大小。感谢您的回答。如果我的问题不清楚,请原谅。我想使字段不可编辑且不可选择。但是管理员应该能够在图片中添加加号。你能发布你的models.py代码吗?请参阅上面的更改readonly\u feild选项对我有效,没有任何开销。但是,我只想添加。如果该字段是外键,它将显示一个下拉列表,旁边有加号。我想禁用该下拉列表,加号按钮留在那里,以便管理员可以添加,但不能从下拉列表中选择感谢帮助。我最终使用javascript方法禁用选择下拉列表。这有点像黑客。非常感谢。谢谢。但是,对于django 1.8,这似乎不起作用,我无法进一步升级。这将是一项艰巨的任务。我的要求也发生了一些变化。谢谢你