2016-05-14 35 views
0

我有到settings.AUTH_USER_MODEL一個OneToOneField連接使用的表和登記應存放在此第二個表心不是信息不存儲在TABEL擴大用戶表的Django/Allauth

這裏的信息時是我的代碼

論模型

類Cliente(models.Model): 用戶= models.OneToOneField(settings.AUTH_USER_MODEL,空=真)

DEPARTAMENTOS = (
    ("ARTIGAS","ARTIGAS"), 
    ("CERRO LARGO","CERRO LARGO"), 
    ("DURAZNO", "DURAZNO"), 
    ("FLORIDA","FLORIDA"), 
    ("MALDONADO","MALDONADO"), 
    ("PAYSANDU","PAYSANDU"), 
    ("RIVERA","RIVERA"), 
    ("SALTO","SALTO"), 
    ("SORIANO","SORIANO"), 
    ("TREINTA Y TRES", "TREINTA Y TRES"), 
    ("CANELONES", "CANELONES"), 
    ("COLONIA", "COLONIA"), 
    ("FLORES", "FLORES"), 
    ("LAVALLEJA", "LAVALLEJA"), 
    ("MONTEVIDEO", "MONTEVIDEO"), 
    ("RIO NEGRO", "RIO NEGRO"), 
    ("ROCHA", "ROCHA"), 
    ("SAN JOSE", "SAN JOSE"), 
    ("TACUAREMBO", "TACUAREMBO"), 
) 

SEXO = (
    ("M","MASCULINO"), 
    ("F","FEMENINO"), 
) 

ubicacion_departamento = models.CharField(_('Departamendo de residencia'),max_length=50,choices=DEPARTAMENTOS, blank=False, default="MONTEVIDEO") 
#Extendemos desde la clase de usuario base que nos da django para pedir los parametros especificos para nuestros usuarios 
fecha_nacimiento = models.DateField(_('Fecha de nacimiento - Formato DÍA/MES/AÑO'), default=django.utils.timezone.now, blank=False) 
#A cambiar por lista de posibles ubicaciones 
sexo = models.CharField(_('Sexo'), choices=SEXO, max_length=1, default="M") 
#Manejo de foto de perfil 
#foto_perfil = models.ImageField(upload_to='fotosPerfil') 



name = models.CharField(_('Name of User'), blank=True, max_length=255) 

def __str__(self): 
    return self.username 

def get_absolute_url(self): 
    return reverse('users:detail', kwargs={'username': self.username}) 


REQUIRED_FIELDS = ['ubicacion_departamento','fecha_nacimiento','sexo'] 

在adapters.py

class RegistroUsuariosAdapter(DefaultAccountAdapter): 
    def save_user(self, request, user, form, commit=True): 
     data = form.cleaned_data 
     user.first_name = data['nombre'] 
     user.last_name = data['apellido'] 
     #campos adicionales para los usuarios clieente 
     user.ubicacion_departamento = data['ubicacion_departamento'] 
     user.fecha_nacimiento = data['fecha_nacimiento'] 
     #Lo que allauth normalmente ya guarda 
     user.username = data['username'] 
     user.email = data['email'] 
     if 'password1' in data: 
      user.set_password(data['password1']) 
     else: 
      user.set_unusable_password() 
     self.populate_username(request,user) 
     if commit: 
      user.save() 
     return user 

和forms.py 類FormularioCliente(SignupForm,的ModelForm):

#input necesario para usuario pero no relacionado a allauth 
nombre = forms.CharField(label='Nombre', strip=True, max_length=50) 
apellido = forms.CharField(label='Apellido', strip=True, max_length=50) 


class Meta: 
    model = Cliente 
    fields = "__all__" 
    exclude = ['user','name',] 

#ubicacion_departamento, fecha_nacimiento, sexo, foto_perfil 
def signup(self, request, user): 
    user = super(FormularioCliente, self).save(request) 

def __init__(self, *args, **kwargs): 
    super(FormularioCliente, self).__init__(*args, **kwargs) 

回答

0

問題是,第二個表是爲Proveedor,它從用戶繼承。

解決方案創建了一個函數來保存被證明者,但將其作爲用戶保存,以便能夠在一對一字段中引用它(解決外鍵約束問題)。