Como nadie respondió me da por pensar q es q no saben
y como encontré la solución la voy a compartir con todos.
El problema es q la tabla user ya esta creada, así q se crea otra tabla (Profile) con relacion 1x1 a userd de esta manera:
Código: Seleccionar todo
from django.db import models
from django.contrib.auth.models import User
class City(models.Model):
name = models.CharField(max_length=def_max_length)
class Meta:
app_label = "sample_user_registration"
verbose_name = "City"
verbose_name_plural = "Cities"
def __unicode__(self):
return "%s" % self.name
class Profile( models.Model ):
user = models.ForeignKey(User, unique=True)
city = models.ForeignKey(City, null=True, blank=True, db_index=True)
class Meta:
app_label = "sample_user_registration"
verbose_name = "User profile"
verbose_name_plural = "User profiles"
Luego se crea un formulario por ejemplo forms.py:
Código: Seleccionar todo
from django import forms
from models import Profile, City
from registration.forms import RegistrationForm
class ProfileForm(forms.Form):
city = forms.ModelChoiceField(queryset=City.objects, label="City", empty_label="Not Defined")
def save(self, user):
try:
data = user.get_profile()
except:
data = Profile(user=user)
data.city = self.cleaned_data["city"]
data.save()
class UserRegistrationForm(RegistrationForm):
city = forms.ModelChoiceField(queryset=City.objects, label="City", empty_label="Not Defined")
Luego pasa este formulario en urls.py a la vista register -
la linea donde se haga esto debe estar antes de la llamada a la app registration :
Código: Seleccionar todo
from django.contrib import admin
import registration.backends.default.urls as regUrls
from profile import UserRegistrationForm
from registration.views import register
import regbackend, views
urlpatterns = patterns('',
(r'^conf/admin/(.*)', admin.site.root),
url(r'^accounts/register/$', register, {'backend': 'registration.backends.default.DefaultBackend','form_class': UserRegistrationForm}, name='registration_register'),
(r'^accounts/', include(regUrls)),
(r'^$', views.index),
)
Ahora necesitamos añadir una suscripción en user_registered signal:
Código: Seleccionar todo
import profile
def user_created(sender, user, request, **kwargs):
form = profile.UserRegistrationForm(request.POST)
data = profile.Profile(user=user)
data.city_id = form.data["city"]
data.save()
from registration.signals import user_registered
user_registered.connect(user_created)
De esta manera no solo logre crear una llave foranea en user sino q se la pongo en el formulario para q se llene cuando se cree el usuario.
Fuente:
http://dmitko.ru/?p=546 En esta pagina hay un ejemplo funcional para descargar.