Christopher
Christopher

Reputation: 56

How do we print django models object value?

Hello, everyone! So, I create models in models.py file of my django project and controllers in views.py . I wrote a function called register(request) that add a new user to my database and another called login(request) that verifies if the datas sent by the user are in my db to log him in. Brief, the problem is when I want to print the user's first name in my template, it shows to me the object in string ...

Here is the login(request) function:

def login(request):

    title = 'Connexion'

    if request.method == 'POST':
        email_sent = request.POST['email']
        password_sent = request.POST['password'].encode('utf-8')

        global isConnected

        user = Users.objects.filter(email = email_sent)

        if user and bcrypt.checkpw(password_sent, user[0].password):
            if isConnected in request.session:
                isConnected = request.session['isConnected']
                return redirect('http://localhost:8000/', 
                                {'isConnected':isConnected, 
                                 'first_name':user[0].first_name, 
                                 'last_name':user[0].first_name})

            else:
                request.session['id'] =user[0].first_name
                request.session['first_name'] = user[0].first_name
                request.session['last_name'] = user[0].first_name
                request.session['phone'] = user[0].first_name
                isConnected = True

                return redirect('http://localhost:8000/', 
                                {'isConnected':isConnected, 
                                 'first_name':user[0].first_name })

        else:
            print('Something went wrong')
            return render(request, 'login.html', 
                          {'title':title, 'isConnected':isConnected})

        return render(request, 'login.html', 
                      {'title':title, 'isConnected':isConnected})

    else:

        return render(request, 'login.html', 
                      {'title':title, 'isConnected':isConnected })

Here is what I represent the user's first_name variable in my template:

<span class="initials" style="...">{{ first_name }}</span>

And that is it prints to me:

<django.db.models.query_utils.DeferredAttribute object at 0x0000017850EE7A00>

Upvotes: 1

Views: 775

Answers (1)

Sarkan
Sarkan

Reputation: 131

just use .first() end of your query as:

   user = Users.objects.filter(email = email_sent).first()

so you have the first object and don't need to slicing. remember that Django queries are lazy.

Upvotes: 2

Related Questions