Django的。 get_profile()不起作用

时间:2014-02-12 16:35:49

标签: python django

我想从我的forms.py

中获取当前用户的信息

我的模特:

class Users(models.Model):
    first_name = models.CharField('First name', max_length=50)
        ....
    user = models.OneToOneField(User, editable=False)

我的观点:

@login_required
def editAccount(request):
    if request.method == 'POST':
        form = EditAccountForm(request.user, request.POST)
        if form.is_valid():
            form.save()

我的表格:

class EditAccountForm(forms.ModelForm):
    class Meta:
        model = Users

    def __init__(self, user, *args, **kwargs):

        self.user = user.get_profile()

我输入了我的settings.py AUTH_PROFILE_MODULE =“user.Users”,我有这样的错误:弃用警告:不推荐使用AUTH_PROFILE_MODULE来定义用户配置文件。 self.user = user.get_profile() 我是django的新手,我没有看到我的错误。 非常感谢

3 个答案:

答案 0 :(得分:7)

您的代码中没有错误。你看到的只是一个弃用警告。

启动Django 1.5,AUTH_PROFILE_MODULE has been deprecated,转而使用自定义用户模型。

您的代码应该仍然可以使用,但理想情况下,您应该阅读custom User model并开始使用它。

答案 1 :(得分:2)

在Django 1.5中弃用了AUTH_PROFILE_MODULE设置和django.contrib.auth.models.User.get_profile()。请参阅AUTH_PROFILE_MODULE

对于您的代码,请尝试:

models.y

class Users(models.Model):
    user = OneToOneField(User, related_name="profile")

forms.py

class EditAccountForm(forms.ModelForm):

    class Meta:
        model = Users

    def __init__(self, user, *args, **kwargs):
        self.user = user.profile

Here's the related question with answers

答案 2 :(得分:-1)

您可以做的另一件事是简单地调用创建用户的模型 要求提供信息。 IE

您创建的用户个人资料。

class User(models.Model):
    username = models.OneToOneField(User, editable=False)
    first_name = models.CharField("Last name", max_length=50)
    last_name = models.CharField("First Name", max_length=50)
    email = models.EmailField(blank=True)

    def __str__(self):
        return "%s" % self.username

然后在您的视图中,您可以执行类似

的操作
class UserProfileView(View):
    def get(self, request):
        self.user = request.user

        #from here you can call your user model requesting for the user information.
        self.userdetails = Users.objects.get(username=self.user)
        if(self.userdetails):
            #user exists
            #you can pass this to the templates and perform actions on using loops
            for details in self.userdetails:
                print details.username
                print details.first_name
                print details.last_name
                #.....