Django Admin:自定义内联模型FormSet(具有非外键关系)

时间:2011-01-20 13:54:52

标签: django django-admin django-forms

(django 1.2.4)

我有两个不同的无关(他们之间没有外键关系)django模型。 例如,让我们说:'学校'和'老师'。

我需要的是,当我在django管理界面中打开添加/编辑视图时,“学校”对象具有教师对象的内联formset。很明显,这不是FK关系,而是逻辑关系(例如:与学校位于同一国家的教师......)。

我需要显示的表格是标准型号表格。 我有一个函数可以给我给定学校的教师列表(如果需要的话,查询集)。

是否有可能实现这样的目标?

2 个答案:

答案 0 :(得分:3)

我的问题不是完全解决方案,但我最终继承了ModelAdmin类并重写了change_view方法,实现了我需要的功能(检索我需要的对象并将它们传递给context_form模板,我也扩展了它)。

...最终真的很喜欢Django AdminSite的可扩展性

答案 1 :(得分:1)

这样做有合理的理由值得怀疑。例如,教师拥有学校的外键是最合乎逻辑的。但是,我最近解决了这个问题,后来才意识到这毕竟不是一个好主意。因为有时只是看到它表达了想到更好的解决方案,我提供了解决方案:

将非相关模型作为内联放入的问题是parent_model是完全错误的。在这种情况下,parent_model是School,这是不正确的并导致异常。假设Teacher有一个真正的父级,解决方案是更正InlineModelAdmin子类中的parent_model字段。您可以通过覆盖init func:

来实现
class TeacherInline(admin.TabularInline):
    def __init__(self, parent_model, admin_site):
        # override to permit change parent_model from School to Teacher-Parent
        # Assume Teacher's parent is Employer
        super(TeacherInline, self).__init__(Employer, admin_site)