2012-03-20 51 views
1

我有一个要求,我想要排除所有父字段,只包括显式定义在子中的字段。Django如何排除父类字段

为简单起见,这里是我的Django代码:

#app2 models.py 
class EmployeeExtended(app1.Employee): 
    boss = models.ForeignKey(User, null=True, blank=True) 

#app1 admin.py 
class EmployeeExtendedInline(admin.StackedInline): 
    model = app2.EmployeeExtended 
    fields = ['boss'] 

class EmployeeAdmin(admin.ModelAdmin): 
    inlines = [EmployeeExtendedInline] 

此代码工作。如果我不给fields,它也会包括所有的父项。但我不想明确写出fields=['boss']。而是我想是这样的:

for field in EmployeeExtendedOnly_Not_In_Its_Parent: 
    fields.append(field) 

请建议代码EmployeeExtendedOnly_Not_In_Its_Parent

+0

是app1.Employee抽象模型或真实模型? – Meitham 2012-03-20 09:30:39

+0

它是一个真正的模型。在数据库中有自己的表。 EmployeeExtended对Employee有一个隐含的fk。 – jerrymouse 2012-03-20 09:33:16

回答

3

您也许能

fields = [f.name for f in app1.EmployeeExtended._meta._fields() if f not in app1.Employee._meta._fields()] 

脱身但是,说实话,这是丑陋的,我看不到你为什么延长员工。扩展两个模型之间的OneToOneKey。看来你需要的是一个ForeignKey。

+0

+1,这个字段的交集会有所帮助。不过,我想知道这些信息是否可以直接在_meta中找到。 – jerrymouse 2012-03-20 10:27:44