День добрый! Подскажите, как фен-шуйно реализовать следующую структуру данных:
Есть набор элементов, заранее прописанный в исходниках, каждый элемент имеет свой уникальный метод. Например, это может быть список сайтов, и каждый сайт имеет свой метод парсинга. Вобщем, это набор предопределенных объектов, каждый из который имеет свой уникальный метод. Поля у всех элементов одинаковые.
Потом ко всем этим элементам нужно обращаться через foreign key из другой таблицы.
НАПРИМЕР, как это можно сделать.
Технически это можно сделать, создав класс models.Model, и в его наследниках переопределить наш метод - используя полиморфизм. Но получится не очень красиво - будет создано по целой таблице на инстанс (а инстанс нам нужен только один):
"""
ИЛЛЮСТРАЦИЯ МЫСЛИ
"""
class BaseObject(models.Model):
field1 = models.CharField()
field2 = models.CharField()
class UniquieObject1(BaseObject):
def get_value(self):
return 10
class UniquieObject2(BaseObject):
def get_value(self):
return 20
class Engine(models.Model):
name = models.CharField()
object = models.ForeignKey(BaseObject)
Хорошо бы, если бы как-то ForeignKey указывал на набор объектов. Пользователю редактировать эти объекты не нужно, они создаются раз и навсегда при написании кода.
Извиняюсь, если несколько сумбурно описал, задавайте наводящие вопросы)))
PS Добавлю для ясности:
в итоге нужно получить
objects = Engine.objects.all()
for i in objects:
i.object.get_value() #<----- вызывает метод, соответствующий
# объекту (UniquieObject1 или UniquieObject2)
Updated 1 Aug. 2017, 15:39 by swasher.