为了在Django AdminForm中仅显示ForeignKey Selectbox中的相关项目,我使用ActionAdminForm类自定义了ActionAdmin模型。预选值我使用了像https://stackoverflow.com/a/9191583/326905这样的类。非常感谢,这非常好。
但是当用户没有导航表格时客户 - >项目 - >动作并直接导航到django admin中的Actions我想在ActionAdmin表单中的foreignkey项目的selectbox中显示值,格式如下:
客户名1 - 项目名称1 客户名称1 - 项目名称2 客户名称2 - 项目名称3
我的问题是,如何覆盖self.fields [“project”]
在下面的代码中的else情况下,为了使我从select.customer.name和Project.name连接selectbox值?
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
答案 0 :(得分:1)
我得到了解决方案。是啊。首先,当我尝试使用self.fields [“project”]时,我总是出错,但现在它有效。我把它放到else中并编写了一个类似下面的ProjectModelChoiceField,受此描述的影响:http://bradmontgomery.blogspot.de/2009/01/custom-form-for-djangos-automatic-admin.html
class ProjectModelChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return "%s - %s"%(obj.customer.name, obj.name)