不存储在表格上的信息扩展用户表Django / Allauth

时间:2016-05-14 19:22:20

标签: python django django-allauth

我有一个表与一个设置.AUTH_USER_MODEL的OneToOneField连接,当注册应该存储在第二个表上的信息时不是

这是我的代码

在模型上

class Cliente(models.Model):     user = models.OneToOneField(settings.AUTH_USER_MODEL,null = True)

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)

1 个答案:

答案 0 :(得分:0)

问题是第二个表是Proveedor,它继承自User。

解决方案是创建一个functino来保存证明者,但是第一手将它保存为用户,以便能够在一对一的字段中引用它(解决外键约束问题)。