У меня есть решение, которое я думал, что смогу позаботиться о наследовании модели, но теперь, глядя на него снова, оно фактически не решает мою проблему. Я хотел бы иметь возможность назвать одну модель, а затем получить доступ к полям дочерней модели. С наследованием я все еще должен поместить имя дочерней модели в командную строку, которая побеждает всю цель. Вот пример того, что я хотел бы:
class LessonModule(models.Model):
lesson = models.ForeignKey('Lesson')
name = models.CharField(max_length=100, blank=True)
class ProfileImage(LessonModule):
file_loc = models.ImageField(upload_to="profiles/")
detail_file_loc = models.ImageField(upload_to="profiles/", blank=True)
def render(self):
t = loader.get_template("template/profile_image.html")
c = Context({'image_path': self.file_loc.url})
return t.render(c)
def __unicode__(self):
return '[prof: %d]' % self.id
class Note(LessonModule):
def __unicode__(self):
return '[note: %d]' % self.id
def render(self):
return self.id
То, что я хотел бы сделать, это сделать:
module = LessonModule.objects.get(pk=20)
module.render()
И он должен запустить соответствующую функцию рендеринга. Например, если pk совпадает с моделью Note, он просто возвращает self.id. Конечно, это упрощается тем, что я хочу сделать с этими функциями.
Мне не нужно использовать наследование моделей. Это выглядело как лучший способ сделать это. Я просто хочу, чтобы центральная область искала все возможные модули.
Я бы также использовал это для извлечения всех модулей уроков, назначенных уроку, из внешнего ключа урока в модуле урока.