使用 django-allauth 在 SignupForm 中添加更多字段

jho*_*rab 4 django django-models django-forms django-allauth

楷模:

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()
Run Code Online (Sandbox Code Playgroud)

形式:

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()
Run Code Online (Sandbox Code Playgroud)

浏览次数:

ACCOUNT_FORMS = {'signup': 'myproject.forms.CustomSignupForm',}
Run Code Online (Sandbox Code Playgroud)

这个过程不行。错误是:模型类 all_auth.models.Profile 未声明显式 app_label 并且不在 INSTALLED_APPS 中的应用程序中。

我该如何解决?或者,如何使用 django-allauth 通过 SignupForm 添加更多字段?

小智 6

创建一个应用,比如账户,就有这个代码,但是创建这个代码后才需要创建数据库,在项目中进行第一次迁移更准确

\n\n
accounts/models.py\n\nfrom django.db import models\nfrom django.contrib.auth.models import AbstractUser\n\nclass CustomUser(AbstractUser):\n    phone = models.CharField(max_length=12)\n\n\naccounts/forms.py\n\nfrom allauth.account.forms import SignupForm\nfrom django import forms\nfrom .models import *\n\nclass SimpleSignupForm(SignupForm):\n    phone = forms.CharField(max_length=12, label='\xd0\xa2\xd0\xb5\xd0\xbb\xd0\xb5\xd1\x84\xd0\xbe\xd0\xbd')\n    def save(self, request):\n        user = super(SimpleSignupForm, self).save(request)\n        user.phone = self.cleaned_data['phone']\n        user.save()\n        return user\n\n\nsettings.py\n...\nACCOUNT_FORMS = {'signup': 'accounts.forms.SimpleSignupForm'}\nAUTH_USER_MODEL = 'accounts.CustomUser'\n\n\naccounts/admin.py\n\nfrom django.contrib import admin\nfrom .models import *\n\nadmin.site.register(CustomUser)\n
Run Code Online (Sandbox Code Playgroud)\n