Django:authtools会在创建用户时创建用户配置文件

时间:2018-06-10 23:03:08

标签: python django

我正在使用authtools插件来管理django中的用户及其配置文件,但是当我创建用户时,它不会创建其配置文件,我必须转到网站的管理部分并手动创建它。 / p>

我将应用程序分为帐户和个人资料。

这是个人资料模型:

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL,
                                on_delete=models.CASCADE,
                                primary_key=True)
    slug = models.UUIDField(default=uuid.uuid4, blank=True, editable=False)
    email_verified = models.BooleanField("Email verified", default=True)

这是在配置文件应用程序中的signal.py:

@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_profile_handler(sender, instance, created, **kwargs):
    if not created:
        return
    profile = models.Profile(user=instance)
    profile.save()
    logger.info('New user profile for {} created'.format(instance))

这是帐户应用的admin.py:

class UserProfileInline(admin.StackedInline):
    model = Profile


class NewUserAdmin(NamedUserAdmin):
    inlines = [UserProfileInline]
    list_display = ('is_active', 'email', 'name', 'permalink',
                    'is_superuser', 'is_staff',)

    # 'View on site' didn't work since the original User model needs to
    # have get_absolute_url defined. So showing on the list display
    # was a workaround.
    def permalink(self, obj):
        url = reverse("profiles:show",
                      kwargs={"slug": obj.profile.slug})
        # Unicode hex b6 is the Pilcrow sign
        return format_html('<a href="{}">{}</a>'.format(url, '\xb6'))


admin.site.unregister(User)
admin.site.register(User, NewUserAdmin)
admin.site.register(Profile)

当我注册用户时,创建了用户和配置文件对象,只有它们没有链接。那是为什么?

谢谢

1 个答案:

答案 0 :(得分:0)

在models.py中的个人资料模型下方使用此项。我希望你通过另一个slugify信号产生slu ..

def user_created_receiver(sender, instance, created, *args, **kwargs):
    if created:
        Profile.objects.get_or_create(user = instance)
post_save.connect(user_created_receiver, sender = User)