1

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

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)

然后,当我为 InternshipRequest 模型(实际上,我的子类之一可能与之相关的任何模型)设置我的管理员时,我想将 InternshipApproval 模型作为内联模型包含在内:

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

...

class InternshipAdmin(admin.ModelAdmin):
    inlines= [InternshipApprovalInline]

一切都很好,除了在加载管理界面时,抽象基础模型中的“批准者”字段是一个空的选择元素。

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

4

0 回答 0