Django管理内联未显示抽象模型中的外键选择

Django管理内联未显示抽象模型中的外键选择,django,django-admin,Django,Django Admin,我有一个具有抽象基本模型的应用程序: class Approval(models.Model): approver=models.ForeignKey(User,to_field='username') decision=models.CharField(max_length=50,choices=APPROVAL_TYPES) response=models.TextField() class Meta: abstract=True 然后,我

我有一个具有抽象基本模型的应用程序:

class Approval(models.Model):
    approver=models.ForeignKey(User,to_field='username')
    decision=models.CharField(max_length=50,choices=APPROVAL_TYPES)
    response=models.TextField()

    class Meta:
        abstract=True
然后,我有一系列基于该抽象模型的模型,所有这些模型通常定义一个外键(因为它们与不同的模型相关)以及该模型特有的几个字段。大概是这样的:

class InternshipApproval(Approval):
    req=models.ForeignKey(InternshipRequest)
    priority=models.BooleanField(blank=True)

    def __unicode__(self):
        return "Approval for %s" % (self.req)
然后,当我为(比如)InternishipRequest模型(实际上,我的子类可能与之相关的任何模型)设置管理员时,我希望将InternishipApproval模型作为内联:

class InternshipApprovalInline(admin.StackedInline):
    model=InternshipApproval
    max_num=1
    extra=1
    can_delete=False

...

class InternshipAdmin(admin.ModelAdmin):
    inlines= [InternshipApprovalInline]
除了加载管理界面时,抽象基础模型中的“approver”字段是一个空的select元素之外,一切都很好


我已经验证过,如果我在子模型(而不是抽象基础模型)中包含该字段,它将正确地获得完整的用户查询集(或者使用我在这里找到的各种策略对其进行过滤)。我还验证了,如果我单独注册实习生批准模型管理员,那么那里的管理员窗格(即不是内联的)也将正确地获得完整的用户查询集,即使该字段位于抽象基础模型上。最后,我验证了approver字段仍然有效。。。我可以使用它旁边的小加号添加一个新用户,该用户显示并正确保存(但如果我进入编辑模型,则会再次从选择元素中消失)。因此,在抽象模型上有一个外键字段,不允许它将查询集传递给内联(我不能重写它,不能传递初始值,等等)。我错过了什么,在这里?(请注意,我使用的是Django 1.5.1)非常感谢。

您为什么要使用
to_field='username'
?也许Django内联不喜欢这样。你也可以尝试在内联类中添加
fk_name='username'
。我所在的组织中,每个人都有一个内部唯一的“netid”分配给他们,我们的许多应用程序都使用它来表示用户名、各种主键等(简化了跨多个平台、dbs等的操作)。无论如何,不幸的是,这不是问题所在;当模型被设置为用户id时,我看到了同样的问题。我将尝试设置fk_name属性并报告。。。可能是Django因为抽象类而弄不清楚应该锁定哪个关系,所以这可能会有所帮助。