我有一个具有抽象基本模型的应用程序:
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]
一切都很好,除了在加载管理界面时,"批准者"抽象基础模型中的字段是一个空的选择元素。
我已经验证过,如果我在子模型上包含该字段(而不是抽象基础模型),它将正确地获取完整的用户查询集(或者我想要使用各种策略对其进行的任何过滤我和# 39;在这里发现了SO)。我还验证了如果我单独注册InternshipApproval模型管理员,那么那里的管理窗格(即不作为内联)将正确地获得完整的用户查询集,即使该字段在抽象基础模型上也是如此。最后,我已经验证了批准者字段仍然有效......我可以使用旁边的小加号添加新用户,该用户显示并正确保存(但随后从select元素中再次消失)如果我进去编辑模型)。所以有一些关于在抽象模型上有一个外键字段的东西,它不会让它通过内联的查询集(我不能覆盖它,不能传递初始值)等等)。我错过了什么,这里? (请注意我在Django 1.5.1上)非常感谢。