Foros del Web » Programando para Internet » Python »

Problema lógico

Estas en el tema de Problema lógico en el foro de Python en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 25/11/2013, 00:39
Avatar de d1vxpr  
Fecha de Ingreso: agosto-2010
Mensajes: 13
Antigüedad: 14 años, 4 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)
  #2 (permalink)  
Antiguo 25/11/2013, 15:05
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Problema lógico

Este es un ejemplo típico de un GenericForeignKey.
  #3 (permalink)  
Antiguo 25/11/2013, 20:59
Avatar de d1vxpr  
Fecha de Ingreso: agosto-2010
Mensajes: 13
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Problema lógico

Muchas gracias por la información, me pondré a leer inmediatamente para resolver el asunto y cuando lo comprendo responderé a este post por si alguien mas tiene un problema similar.

Etiquetas: apps, cursos, django, foreignkey, logica, universidad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:42.