型号:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(max_length=500, blank=True)
nationality = models.CharField(max_length=20)
def __str__(self):
return self.user.first_name
@receiver(post_save, sender=User)
def create_user_profile(self, sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(self, sender, instance, **kwargs):
instance.profile.save()
表格:
from allauth.account.forms import SignupForm
class CustomSignupForm(SignupForm):
first_name = forms.CharField(max_length=100)
last_name = forms.CharField(max_length=100)
class Meta:
model = Profile
fields = ('first_name', 'last_name', 'nationality', 'bio')
def signup(self, request, user):
# Save your user
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
user.profile.nationality = self.cleaned_data['nationality']
user.profile.gender = self.cleaned_data['bio']
user.profile.save()
观看次数:
ACCOUNT_FORMS = {'signup': 'myproject.forms.CustomSignupForm',}
此过程无效。 错误是:模型类all_auth.models.Profile没有声明显式的app_label,并且不在INSTALLED_APPS中的应用程序中。
我该如何解决?或者,如何使用django-allauth使用SignupForm添加更多字段?
答案 0 :(得分:0)
from allauth.account.forms import SignupForm
class MyCustomSignupForm(SignupForm):
phone = forms.CharField(max_length=12, label='Phone')
def save(self, request):
user = super(MyCustomSignupForm, self).save(request)
user.phone = self.cleaned_data['phone']
user.save()
return user
settings.py
ACCOUNT_FORMS = {'signup': 'accounts.forms.MyCustomSignupForm'}
答案 1 :(得分:0)
创建一个应用程序,例如帐户,并且具有此代码,但是仅在创建此代码后才需要创建数据库,在项目中执行第一次迁移更为准确
accounts/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
phone = models.CharField(max_length=12)
accounts/forms.py
from allauth.account.forms import SignupForm
from django import forms
from .models import *
class SimpleSignupForm(SignupForm):
phone = forms.CharField(max_length=12, label=’Телефон’)
def save(self, request):
user = super(SimpleSignupForm, self).save(request)
user.phone = self.cleaned_data[‘phone’]
user.save()
return user
settings.py
...
ACCOUNT_FORMS = {‘signup’: ‘accounts.forms.SimpleSignupForm’}
AUTH_USER_MODEL = ‘accounts.CustomUser’
accounts/admin.py
from django.contrib import admin
from .models import *
admin.site.register(CustomUser)