2012-03-20 3 views
1

У меня есть требование, когда я хочу исключить все родительские поля, просто включите поля, явно определенные в дочернем.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

is app1.Employee абстрактная модель или настоящая модель? – Meitham

+0

Это настоящая модель. Имеет собственную таблицу в базе данных. EmployeeExtended имеет неявный fk для Employee. – jerrymouse

ответ

3

Вы могли бы уйти с

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

Но, честно говоря, это некрасиво, и я не могу видеть почему вы расширили Employee. Расширение делает OneToOneKey между двумя моделями. Кажется, что вам нужен ForeignKey.

+0

+1, Это пересечение полей поможет. Тем не менее, я хочу знать, доступна ли эта информация в _meta где-то. – jerrymouse

Смежные вопросы