У меня есть класс Base для многих подклассов, и единственное, что меняется в подклассах, это определенный метод (шаблон шаблона). Однако я застрял и не могу заставить его работать.Любой способ использования модели Django в качестве интерфейса?
class Base(models.Model):
_value = models.CharField(max_length=200)
_name = models.CharField(max_length=200)
user = models.ForeignKey(User, related_name="some_set")
#used as a property
def value():
def fget(self):
self.refresh()
return self._value
def refresh(self):
raise NotImplementedError("..")
class Subclass1(Base):
def refresh(self):
self._value = some_val
class Subclass2(Base):
def refresh(self):
self._value = some_other_val
Я хотел бы быть в состоянии обработать весь связанный набор в тех же организации, и вызвать свойство значения по каждому, с каждым отложив его собственную реализованную версию обновления, т.е.
for x in user.some_set.all():
print x.value
, но на данный момент это не представляется возможным, даже с удалением обновления в суперклассе. Я также думал об использовании шаблона стратегии и использовать отношение ForeignKey для вызова метода, но мне все равно придется иметь базовый класс в ForeignKey, из которого происходят подклассы.
посмотрите https://github.com/saxix/django-strategy-field – sax