Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/11/2013, 00:39
Avatar de d1vxpr
d1vxpr
 
Fecha de Ingreso: agosto-2010
Mensajes: 13
Antigüedad: 14 años, 3 meses
Puntos: 0
Pregunta Problema lógico

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 original
  1. from django.db import models
  2.  
  3. class Institution(models.Model):
  4.     name = models.CharField(max_length=140)
  5.    
  6.     def __unicode__(self):
  7.         return self.name
  8.    
  9. class Faculty(models.Model):
  10.     institution = models.ForeignKey(Institution)
  11.     faculty = models.CharField(max_length=140)
  12.    
  13.     def __unicode__(self):
  14.         return self.faculty
  15.    
  16. class Department(models.Model):
  17.     faculty = models.ForeignKey(Faculty)
  18.     department = models.CharField(max_length=140)
  19.    
  20.     def __unicode__(self):
  21.         return self.department
  22.  
  23. class Program(models.Model):
  24.     department = models.ForeignKey(Department)
  25.     program = models.CharField(max_length=128)
  26.     abbreviation = models.CharField(max_length=5)
  27.    
  28.     def __unicode__(self):
  29.         return self.program
  30.    
  31. class Specialty(models.Model):
  32.     program = models.ForeignKey(Program)
  33.     specialty = models.CharField(max_length=128)
  34.    
  35.     def __unicode__(self):
  36.         return self.specialty
  37.  
  38. class Subspecialty(models.Model):
  39.     specialty = models.ForeignKey(Specialty)
  40.     subspecialty = models.CharField(max_length=128)
  41.    
  42.     def __unicode__(self):
  43.         return self.subspecialty


App 2 - courses/model.py

Código Python:
Ver original
  1. from django.db import models
  2. from structure.models import Specialty, Subspecialty
  3.  
  4. class Course(models.Model):
  5.     specialty = models.ForeignKey(Specialty)
  6.     subspecialty = models.ForeignKey(Subspecialty)
  7.     course_number = models.CharField(max_length=15)
  8.     course_name = models.CharField(max_length=128)
  9.     def __unicode__(self):
  10.         return self.course_number
  11.    
  12. class Section(models.Model):
  13.     course = models.ForeignKey(Course)
  14.     section_name = models.CharField(max_length=5)
  15.     credit_hour = models.PositiveIntegerField(default=3)
  16.    
  17.     def __unicode__(self):
  18.         return self.section_name  
  19.  
  20. class Semester(models.Model):
  21.     section = models.ForeignKey(Section)
  22.     semester_name = models.CharField(max_length=24)
  23.     start_year = models.PositiveIntegerField()
  24.     start_month = models.PositiveIntegerField()
  25.     end_year = models.PositiveIntegerField()
  26.     end_month = models.PositiveIntegerField()
  27.    
  28.     def __unicode__(self):
  29.         return u'%s (%d/%d - %d/%d)' % (self.semester_name, self.start_year, self.start_month, self.end_year, self.end_month)