2012-03-16 21 views
7

im teniendo dos modelos uno son los usuarios de la empresa y el otro es la calificación y un usuario tiene muchas calificaciones
ahora necesito ingresar las calificaciones mientras creo el usuario en el administrador ¿cómo hago eso?django relación uno a muchos

intenté mantener muchos campos en muchos en el modelo de usuarios pero en vano ... las cualificaciones que están relacionadas con otros usuarios están ocupando los campos donde tengo que crear nuevas calificaciones para el nuevo usuario.

código sigue ..

class Qualification(models.Model): 
    qualification = models.CharField(max_length=250) 
    max_marks = models.IntegerField(max_length=50) 
    marks_obtained = models.IntegerField(max_length=50) 
    qualifying_year = models.DateField(auto_now=False, null=True) 

class CompanyUser(User): 
    date_of_birth = models.DateField(auto_now=False, null=True) 
    position = models.CharField(max_length=100) 
    qualifications = models.ManyToManyField(Qualification) 

aquí es los detalles del usuario de empresa ..

{ "nombre de usuario": "posición" "Steve", "ingeniero jefe", "fecha_de_nacimiento" : "14/05/1986"}

{ "cualificación": "la escuela secundaria", "max_marks": "1000", "marks_obtained": "850", "qualifying_year": "1990"}

{"qua lification ":" undergraduation "," max_marks ":" 750 "," marks_obtained ":" 680 "," qualifying_year ":" 1992 "}

{" qualification ":" postgraduation "," max_marks ":" 1500 ", "marks_obtained": "1280", "qualifying_year": "1997"}

+0

¿Debe una calificación estar relacionada con exactamente un usuario? ¿O pueden varios usuarios tener la misma calificación? En el último caso, ManyToManyField es el correcto, ya que un CompanyUser tiene muchas calificaciones y una calificación puede ser mantenida por muchos CompanyUsers. – j0ker

+0

@jOker --- dado que la calificación contiene marcas/puntajes obtenidos por el usuario, debe estar relacionada con ** exactamente un usuario **, y el número de calificaciones varía de un usuario a otro. digamos que user1 tiene 2 calificaciones y luego user2 puede tener 2 o más de 2 calificaciones. – Dharani

Respuesta

13

La relación Uno-a-Muchos que busca no existe en Django. No es necesario, ya que puede hacerlo al revés: con una relación ForeignKey desde la cualificación hasta el usuario. De acuerdo con el ejemplo, debe definir los modelos de la siguiente manera:

class Qualification(models.Model): 
    qualification = models.CharField(max_length=250) 
    max_marks = models.IntegerField(max_length=50) 
    marks_obtained = models.IntegerField(max_length=50) 
    qualifying_year = models.DateField(auto_now=False, null=True) 
    user = models.ForeignKey('CompanyUser', related_name='qualifications') 

class CompanyUser(User): 
    date_of_birth = models.DateField(auto_now=False, null=True) 
    position = models.CharField(max_length=100) 

Por lo tanto, no existe una relación especificada de CompanyUser a la calificación, pero usted tiene una relación ForeignKey de Calificación para CompanyUser (es decir, cada cualificación pertenece a un usuario, pero múltiples calificaciones pueden pertenecer al mismo usuario). Django mantiene automáticamente la relación inversa entre CompanyUser y Qualification, que es la relación One-To-Many que está buscando. Con la opción related_name de ForeignKey, puede especificar un nombre significativo para la relación hacia atrás (en este caso, "calificaciones"). Ahora puede simplemente acceder a las Cualificaciones en un objeto CompanyUser con el atributo user.qualifications.

En el administrador, primero debe crear un nuevo Usuario de empresa y luego un número arbitrario de Calificaciones que asigna a este usuario a través de la Clave externa.

Asegúrese de leer sobre eso en la sección de documentación de Django sobre Model relationships.

+0

@joker gracias por la respuesta fue útil, pero tengo otro problema con la solución anterior. después de crear CompanyUser, necesito crear calificaciones para ese usuario. pero necesito crear calificaciones al crear un usuario de la compañía. Cómo puedo hacer eso. – Dharani

+0

Obviamente tiene que crear CompanyUser primero, ya que las Cualificaciones dependen de su ID como ForeignKey.Por lo tanto, el usuario debe estar ya en la base de datos cuando se guarda la calificación. No hay una forma integrada de realizar ambas acciones en un solo paso en el administrador. Sin embargo, si está escribiendo la aplicación usted mismo, puede crear un formulario para ingresar datos para el Usuario de la Compañía así como sus Calificaciones, enviar los datos al servidor y usar una función de vista para guardar primero al usuario y sus calificaciones después de eso . – j0ker

+0

@ j0ker-- gracias fue realmente útil. Estaba pensando si había alguna funcionalidad incorporada. – Dharani

Cuestiones relacionadas