【发布时间】:2012-06-11 07:56:25
【问题描述】:
为了在 Django AdminForm 的 ForeignKey 选择框中仅显示相关的项目,我使用 ActionAdminForm 类自定义了我的 ActionAdmin 模型。为了预选值,我使用了类似此处发布的类https://stackoverflow.com/a/9191583/326905。非常感谢,这真的很好。
但是当用户不导航表单客户 -> 项目 -> 操作并直接导航到 django admin 中的操作时,我想在 ActionAdmin 表单中显示外键项目的选择框中的值,格式如下:
客户名称 1 - 项目名称 1
客户名称 1 - 项目名称 2
客户名称 2 - 项目名称 3
我的问题是,我如何覆盖 self.fields["project"]
在下面代码中的 else 情况下,
以便我获得从
Project.customer.name 和 Project.name 连接的选择框值?
class ActionAdminForm(ModelForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(ActionAdminForm, self).__init__(*args, **kwargs)
if self.request.GET.get('project'):
prj = Project.objects.get(id=self.request.GET.get('project'))
self.fields["project"].queryset = Project.objects.filter(customer = prj.customer)
else:
self.fields["project"] = ProjectModelChoiceField(Project.objects.all().order_by('name'))
class Meta:
model = Action
【问题讨论】:
-
我自己解决了。覆盖 ModelChoiceField 是线索。
-
干得好,为自己解决问题 +1。我完全忘记了
ModelChoiceField.label_from_instance。 -
谢谢。 python越来越多了,django给我发力了。
-
您应该发布您的答案并将其标记为已接受,这将使遇到相同问题的用户更容易:)
-
我刚刚将我的答案移至单独的答案
标签: django forms django-models admin modelform