Jeremy
Jeremy

Reputation: 159

Django. get_profile() don't work

I want to get information from current user in my forms.py

My Model:

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

My view:

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

My Form:

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

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

        self.user = user.get_profile()

I put in my settings.py AUTH_PROFILE_MODULE = "user.Users", I have this error: Deprecation Warning: The use of AUTH_PROFILE_MODULE to define user profiles has been deprecated. self.user = user.get_profile() I'm new on django I don't see my mistake. Thanks a lot

Upvotes: 2

Views: 7059

Answers (3)

Wangolo Joel
Wangolo Joel

Reputation: 60

Another thing that you could do is simple call the model that created the user and request for the information. IE

Your created user profile.

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

Then in your view you could do something like

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
                #.....

Upvotes: -1

Ralph
Ralph

Reputation: 430

The AUTH_PROFILE_MODULE setting, and the django.contrib.auth.models.User.get_profile() was depreciated in Django 1.5 See AUTH_PROFILE_MODULE

For your code try this:

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

Upvotes: 2

Sunny Nanda
Sunny Nanda

Reputation: 2382

There is no error in your code. What you see is just a deprecation warning.

Starting Django 1.5, AUTH_PROFILE_MODULE has been deprecated in favour of custom User models.

Your code should still work though, but ideally you should read up on custom User model and start using it.

Upvotes: 7

Related Questions