【发布时间】:2018-03-05 21:25:25
【问题描述】:
我有模型 A、B 和 AB。
A 对象有一个名为A.m 的ManyToManyField,它可以通过我的中间模型AB 链接到许多B 对象。
我的A 模型的管理页面上有一个非常好的TabularInline 部分,其中包含AB 对象。
一切都好。除了TabularInline 部分在每个AB 对象的行中显示B 对象的“添加”和“更改”按钮,我想删除这些按钮。我仍然希望能够添加、更改和删除 AB 对象行,而不是它们引用的 B 对象。
我尝试将can_add_related、can_change_related、can_delete_related 属性设置为False,但这没有任何作用。
class ABInline(admin.TabularInline):
model = AB
def get_form(self, request, obj=None, **kwargs):
form = super(ABInline, self).get_form(request, obj, **kwargs)
form.base_fields['m'].widget.can_add_related = False
form.base_fields['m'].widget.can_change_related = False
form.base_fields['m'].widget.can_delete_related = False
return form
这是一个错误吗?或者有没有其他方法可以为TabularInline 字段完成此操作?
【问题讨论】:
-
get_form方法未在TabularInline上实现(only 在ModelAdmin上)。这就是为什么什么都没有发生。否则我认为它也不起作用,因为您需要更改AB上指向B的字段的小部件,而'm'是A上的字段。
标签: django django-admin