我试图过滤在django管理内联的foreignkey字段中显示的选项。因此,我想访问正在编辑的父对象。我一直在研究,但找不到任何解决办法。
class ProjectGroupMembershipInline(admin.StackedInline):
model = ProjectGroupMembership
extra = 1
formset = ProjectGroupMembershipInlineFormSet
form = ProjectGroupMembershipInlineForm
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
if db_field.name == 'group':
kwargs['queryset'] = Group.objects.filter(some_filtering_here=object_being_edited)
return super(ProjectGroupMembershipInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
我已经验证了在编辑对象时kwargs是空的,因此无法从那里获取对象。
有什么帮助吗?谢谢
另一种方式,那,IMHO,感觉比,更干净,但类似于@erichonkanen的回答是这样的:
为了筛选管理内联中外键字段的可用选项,我重写了表单,以便可以更新表单字段的
queryset
属性。这样您就可以访问self.instance
,它是表单中正在编辑的对象。所以像这样:如果您执行上述操作,则不需要使用
formfield_for_foreignkey
,它应该可以完成您所描述的内容。我可以通过使用formfield_for_foreignkey并从url中剥离对象ID来解决这个问题。这不是获取ID的最性感的方法,但是Django还没有提供对管理对象上的对象ID的访问(它应该提供)。
相关问题 更多 >
编程相关推荐