在Django中使用扩展用户模型中的用户名检索用户详细信息

时间:2019-09-16 07:54:02

标签: python django django-models

我正在尝试使用用户名 test 从Django中的扩展用户模型中检索用户的详细信息。但是我做不到。这给了我错误:

  

ValueError为/以int()为基数为10的无效文字:“ test”

以下是我的代码:

models.py

class DocchainUser(models.Model):
    docchainuser_name = models.OneToOneField(User, on_delete = models.CASCADE, default='x')
    address = models.CharField(max_length=64,unique=True)   

    def __str__(self):
        return self.address

views.py

def my_users(request):
    if request.method == 'POST':    
        username = request.POST.get('username') 
        user = authenticate(username=username)
        if user:
            if user.is_authenticated:
                signBool = signatureAuth(username)
                if signBool == 'AUTHENTICATED':
                    login(request, user, backend=settings.AUTHENTICATION_BACKENDS[0])
                    return HttpResponseRedirect('/dashboard')
               ....

现在是signatureAuth():

def signatureAuth(username):  
    userModel = DocchainUser.objects.filter(docchainuser_name=username)
    address = userModel.address
    print(address)
    ...

我正在使用signatureAuth()方法中的用户名:test 来检索用户详细信息。 测试已经存在于我的用户以及DocchainUser模型中。

1 个答案:

答案 0 :(得分:0)

您没有扩展的用户模型,您拥有一个与用户一对一关系的单独模型。因此,要通过用户名查询该模型,您需要遵循以下关系。

userModel = DocchainUser.objects.filter(docchainuser_name__username=username)

请注意,您在此处苦苦挣扎的原因之一是您的OneToOneField可能被错误命名;关系与整个模型有关,而不与用户名有关;您应该将其命名为docchainuser

(还要注意,您的if user.is_authenticated是毫无意义的;它只是检查用户是User的实例,而不是AnonymousUser的实例,您知道这是因为您只是从User模型中明确检索了它。)