【问题标题】:How to get django-all auth to pass data to custom user model如何让 django-all auth 将数据传递给自定义用户模型
【发布时间】:2021-04-29 00:57:00
【问题描述】:

我正在使用 django-allauth 在 Django 中创建一个站点以进行身份​​验证。

我在 account.models 中创建了一个自定义用户类来添加一个自定义字段 UserExtraFiledSignup ,我添加了图像字段,以便用户可以在注册期间为他的帐户上传个人资料照片,但我遇到了问题

我遇到的问题是当用户创建帐户并上传照片时实际上它没有上传我不知道是什么错误

编辑

我的应用 |模型.py:

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    profile_photo = models.ImageField(default='', upload_to='images/')

def __str__(self):
    return self.username

我的应用 |表格.py:

class CustomSignupForm(SignupForm):
    def __init__(self, *args, **kwargs):
        super(CustomSignupForm, self).__init__(*args, **kwargs)
        self.fields['profile_img'] = forms.FileField(required = False)

    def save(self, request):
        user = super(CustomSignupForm, self).save(request)
        user.profile_img = self.cleaned_data.get('profile_img')
        user.save()
        return user

我的应用 |设置.py:

ACCOUNT_FORMS = {
    'signup': 'blog_app.forms.CustomSignupForm',
}

点击迁移时出错

ERRORS: auth.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse accessor for 'User.groups'. HINT: Add or change a related_name argument to the definition for 'User.groups' or 'User.groups'. auth.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' clashes with reverse accessor for 'User. user_permissions'. HINT: Add or change a related_name argument to the definition for 'User.user_permissions' or 'User.user_permissions'. blog_app.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse accessor for 'User.groups'. HINT: Add or change a related_name argument to the definition for 'User.groups' or 'User.groups'. blog_app.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' clashes with reverse accessor for 'U ser.user_permissions'. HINT: Add or change a related_name argument to the definition for 'User.user_permissions' or 'User.user_permissions'.

是什么错误,请问如何解决?

【问题讨论】:

  • 您是否在 formtag 中包含 enctype='multipart/form-data' ?看起来您将照片保存在用户对象中而不是 UserExtraSignup 对象中。
  • 是的,我做到了,但是It also looks like you are saving the photo in the user object and not in the UserExtraSignup object 是什么意思
  • Profile_photo 在模型 UserExtraFiledSignup 而不是 User。您尝试将其保存到用户对象中:user.Profile_photo
  • @hendrikschneider 我试过 Yousuf M.N awnser 但我出错了
  • 您是否尝试过我在下面提到的新错误解决方案?

标签: django django-models django-rest-framework django-allauth


【解决方案1】:

为什么必须为单个字段创建模型?

您可以直接将其添加到您的 User 模型中:

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    profile_photo = models.ImageField(default='', upload_to='images/')

def __str__(self):
    return self.username

您也不需要覆盖帐户适配器。您只需要一个好的CustomSignupForm

class CustomSignupForm(SignupForm):
    def __init__(self, *args, **kwargs):
        super(CustomSignupForm, self).__init__(*args, **kwargs)
        self.fields['profile_img'] = forms.FileField(required = False)

    def save(self, request):
        user = super(CustomSignupForm, self).save(request)
        user.profile_img = self.cleaned_data.get('profile_img')
        user.save()
        return user

这应该对你有用。

【讨论】:

  • 谢谢,但我这样做了,但我想问一下我应该在哪里添加您的代码,在我的应用程序的 models.py 中还是在 allauth.account.models.py 中?
  • 我将模型代码添加到我的应用程序模型中,然后我编辑表单,然后我点击 python manage.py migrate 但我收到此错误 * 我将编辑 q 以查看新错误
  • 您不应更改任何第三方应用程序中的任何内容,而应覆盖它们。
  • 对于错误:转到项目中的“settings.py”并添加“AUTH_USER_MODEL = 'appname.modelname'”。这应该解决错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 2020-07-05
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多