Чтобы переключиться с класса модели на прокси-класс без обращения к базе данных:
class EntryProxy(Entry):
@property
def category(self):
new_inst = EntryProxy()
new_inst.__dict__ = super(EntryProxy, self).category.__dict__
return new_inst
edit: приведенный выше фрагмент кода не работает на django 1.4.
Начиная с django 1.4, яВозьмите все поля значений вручную следующим образом:
class EntryProxy(Entry):
@property
def category(self):
category = super(EntryProxy, self).category
new_inst = EntryProxy()
for attr in [f.attname for f in category.__class__._meta.fields] + ['_state']:
setattr(new_inst, attr, getattr(category, attr))
return new_inst
Чтобы переключиться с набора запросов на дочерний прокси-класс без обращения к базе данных:
class CategoryProxy(Category):
@property
def entry_set(self):
qs = super(CategoryProxy, self).entry_set
qs.model = EntryProxy
return qs