Estoy tratando de hacer una aplicación en Django pero tengo problemas para resolver un problema lógico.
Ahora mismo tengo 2 apps, el primer app tiene la estructura de una institución universitaria. La universidad tiene facultades, las facultades departamentos, los departamentos programas, los programas especialidades y las especialidades subespecialidades.
El segundo app contiene los cursos que pueden pertenecer tanto a las especialidades como a las subespecialidades de la universidad. Y este es precisamente el problema. No se como hacer para que los cursos esten asociados con una especialidad o con una subespecialidad, teniendo en cuenta que todas los cursos de la especialidad también son de la subespecialidad pero los cursos de la subespecialidad no son de la especialidad. Estoy haciendo las relaciones con ForeignKey.
Ya he intentado de varias maneras solo me queda la idea de crear 2 funciones iguales, una para los cursos de especialidad y otra para los cursos de subespecialidad pero no quiero llegar a este punto porque va en contra de la política don't repeat yourself de django.
Quisiera, por favor, que me dieran unas pistas sobre como estructurar los modelos de manera que surjan los efectos deseados.
por cierto de momento no tengo nada en views.py y en admin.py solo tengo admin.site.register(nombres de la clases).
App 1 - structure/model.py
Código Python:
Ver original
from django.db import models class Institution(models.Model): name = models.CharField(max_length=140) def __unicode__(self): return self.name class Faculty(models.Model): institution = models.ForeignKey(Institution) faculty = models.CharField(max_length=140) def __unicode__(self): return self.faculty class Department(models.Model): faculty = models.ForeignKey(Faculty) department = models.CharField(max_length=140) def __unicode__(self): return self.department class Program(models.Model): department = models.ForeignKey(Department) program = models.CharField(max_length=128) abbreviation = models.CharField(max_length=5) def __unicode__(self): return self.program class Specialty(models.Model): program = models.ForeignKey(Program) specialty = models.CharField(max_length=128) def __unicode__(self): return self.specialty class Subspecialty(models.Model): specialty = models.ForeignKey(Specialty) subspecialty = models.CharField(max_length=128) def __unicode__(self): return self.subspecialty
App 2 - courses/model.py
Código Python:
Ver original
from django.db import models from structure.models import Specialty, Subspecialty class Course(models.Model): specialty = models.ForeignKey(Specialty) subspecialty = models.ForeignKey(Subspecialty) course_number = models.CharField(max_length=15) course_name = models.CharField(max_length=128) def __unicode__(self): return self.course_number class Section(models.Model): course = models.ForeignKey(Course) section_name = models.CharField(max_length=5) credit_hour = models.PositiveIntegerField(default=3) def __unicode__(self): return self.section_name class Semester(models.Model): section = models.ForeignKey(Section) semester_name = models.CharField(max_length=24) start_year = models.PositiveIntegerField() start_month = models.PositiveIntegerField() end_year = models.PositiveIntegerField() end_month = models.PositiveIntegerField() def __unicode__(self): return u'%s (%d/%d - %d/%d)' % (self.semester_name, self.start_year, self.start_month, self.end_year, self.end_month)