ForeignKey vs campo OneToOne django

Necesito extender el usuario de django con algunos campos adicionales. Encontré 2 formas diferentes allí

class UserProfile(models.Model): user = models.OneToOneField(User) #other fields 

O

 class UserProfile(models.Model): user = models.ForeignKey(User) #other fields 

¿No son los mismos? Después de sincronizarlos, no vi ninguna diferencia en la base de datos mysql

No, ¿por qué piensas eso? Una ForeignKey es una relación de uno a varios, es decir, un usuario puede tener muchos perfiles. OneToOne es, como su nombre lo indica, una relación uno a uno: un usuario solo puede tener un perfil, lo que parece más probable.

Como dijo @Daniel Roseman, estos son 2 tipos diferentes de relaciones rdbms.

Encontrará que se distingue en la situación en la que tendrá (por error, probablemente) más de un perfil para un usuario determinado. En esa situación, myuser.get_profile() generará una excepción MultipleObjectsReturned , ya que básicamente está realizando una consulta get() , bajo el capó.