Why User model has type string?

Viewed 70

I have a view that returns data corresponded to the user, but when I try to find the User I get this error:

Type str has no object method

File views.py

from .models import Question, User 

@api_view(['POST'])
@renderer_classes((TemplateHTMLRenderer, JSONRenderer))
def answers_view(request, *args, **kwargs):
    userstring = request.data["name"]
    try:
        user0 = User.objects.get(username=userstring)
    except ObjectDoesNotExist:
        user0 = "NotFound"
    print("USER: ", user0, flush = True)

File models.py

from django.db import models

# Create your models here.
import random
from django.conf import settings
from django.db import models
from django.db.models import Q

User = settings.AUTH_USER_MODEL
1 Answers

The AUTH_USER_MODEL setting is a string, this is often used to refer to the user model, for example in a ForeignKey, the advantage of this is that at that moment, the user model does not have to be loaded (yet).

In order to get a reference to the model, you use the get_user_model() function [Django-doc]:

from .models import Question
from django.contrib.auth import get_user_model

@api_view(['POST'])
@renderer_classes((TemplateHTMLRenderer, JSONRenderer))
def answers_view(request, *args, **kwargs):
    userstring = request.data['name']
    try:
        user0 = get_user_model().objects.get(username=userstring)
    except ObjectDoesNotExist:
        user0 = 'NotFound'
    print('USER: ', user0, flush=True)
Related