故事以2个模型(User
和ClientAccount
)开头,这些模型与额外的M2M模型相关联。
可以在编辑ClientAccount
期间创建User
。该页面将显示一个弹出窗口,允许您创建新的ClientAccount
。但问题是:我可以禁用链接到ClientAccount
的{{1}}的外键字段吗?这很令人困惑。
代码在这里:
User
答案 0 :(得分:0)
如果您只想隐藏ClientAccount中的m2m字段,可以删除Admin.py中的行
因为你明确地说它应该在tabularInline中显示与用户的连接:
class ClientAccountAdmin(TimeLimitedAdmin):
class UserInline(admin.TabularInline):
model = ClientAccount.users.through
#inlines = [UserInline,]
在那里,您明确表示您希望在内联中将ClientAccount中的M2M字段设置为用户,这是您不想要的。摆脱它,字段将消失
编辑:
问题是“添加...”链接将始终引用.../ClientAccount/add/?_popup=1
页面,该页面使用此模型的默认管理视图。
答案 1 :(得分:0)
我意识到这是一个古老的问题,但是我在寻求解决类似问题时遇到了最相关的问题(仅在添加弹出窗口中隐藏FK内联)。我敢肯定您现在已经把这个问题抛在了后面,但是也许其他人会发现它有用。
我将以下内容添加到了弹出菜单所针对的ModelAdmin
类中。我检查request
是否有GET
参数,这些参数仅在启动弹出对话框时出现,如果存在,则循环浏览内联并删除不需要的内联。
def get_inline_instances(self, request, obj=None):
inline_instances = super().get_inline_instances(request, obj=None)
if '_to_field' in request.GET and '_popup' in request.GET:
# Popup dialog is open.
unwanted_inline = None
for inline in inline_instances:
inline_model_name = inline.opts.model.__name__
if inline_model_name == 'UnwantedModelName':
unwanted_inline = inline
if unwanted_inline:
inline_instances.remove(unwanted_inline)
return inline_instances
在您的情况下,我将上述内容添加到ClientAccountAdmin
中,删除了UserInline
。