【问题标题】:redirect user profile after creating user by admin管理员创建用户后重定向用户配置文件
【发布时间】:2020-04-02 03:14:42
【问题描述】:

我正在开发网络应用程序,只有管理员可以创建新用户。在我的应用中,有两种模型,一种用于创建用户,另一种用于创建用户配置文件,如下所示。

class User(AbstractBaseUser):
    User_Type = [
        ('admin', 'Admin'),
        ..............
    ]
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    email = models.EmailField(_('email address'), unique=True)
    username = models.CharField(_("Username"), max_length=50, unique=True)
    user_type = models.CharField(_("User Type"), choices=User_Type, default='none',)
    ..............

另一种模型是用于存储用户信息。

class UserProfile(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user = models.OneToOneField(User, verbose_name=_("User"), on_delete=models.CASCADE)
    first_name = models.CharField(_("First name"), max_length=50)
    last_name = models.CharField(_("Last name"), max_length=50)
    dob = models.DateField(_("D.O.B"), auto_now=False, auto_now_add=False, blank=False, null=False)
    profile_image = models.ImageField(_("Profile picture"), upload_to='user/profile/', blank=True)
   ............

我想要的是,如果管理员创建了任何用途,它会自动重定向到个人资料页面以添加个人资料。

forms.py 代码在这里。

class CustomUserCreationForm(UserCreationForm):

    class Meta(UserCreationForm):
        model = User
        fields = ('email', 'username', 'user_type')

class UserProfileForm(forms.ModelForm):

    class Meta:
        model = UserProfile
        fields = '__all__'

views.py 在这里

class AddUserView(CreateView):
    model = User
    form_class = CustomUserCreationForm
    template_name = "users/add-user.html"

    def form_valid(self, form):
        form.save()
        return redirect('users:profile-add')

我在 stackoverflow 上尝试了一些已发布的解决方案,但没有一个有效。 Creating user profile pages in Django Creating a extended user profile 我不知道我做错了什么。

【问题讨论】:

  • 这哪里失败了?您是否成功创建新用户?不是重定向到你想要的地方吗?
  • 是的,但它不会创建 profile 。它还会重定向到用户个人资料。

标签: django


【解决方案1】:

您可以在创建用户后使用发布信号来配置您的个人资料。

请检查以下代码。

models.py

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(username=instance)


post_save.connect(create_user_profile, sender=User)

【讨论】:

猜你喜欢
  • 2012-04-30
  • 1970-01-01
  • 2020-08-03
  • 2023-03-30
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多