Saludos a todos,
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 originalfrom 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 originalfrom 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)