Python - Django 查询使用 auth.User 模型作为 OneToOneField

Python - Django query using auth.User model as OneToOneField

我对登录信息使用 auth.User 模型,对用户的所有个人资料数据使用自定义 UserProfile 模型。

auth.User.username 是一个随机字符串。 UserProfile.user 是相同的字符串。

尝试查询数据库时 table "UserProfile" 我收到以下错误:

ValueError: invalid literal for int() with base 10: '3df69698-c97d-11e7-a924-b0c0905e8512'

models.py

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=256, default=None)
    last_name = models.CharField(max_length=256, default=None)
    ...

    def __str__(self):
        return str(self.user)

views.py

from .models import UserProfile
from django.contrib.auth.models import User

def get_users(request):
    data = json.loads(request.body.decode('utf-8'))
    user_id = escape(data['id'])

    # error occurs here
    user_pref = UserProfile.objects.get(user=user_id)

当尝试查询数据库并使用字符串与 auth.User 对象进行比较时,问题就出现了。我不知道如何解决这个问题?

也许是这样:

UserProfile.objects.get(user__user_id=user_id)

该字符串应该是用户名吗?如果是这样,您应该明确查询该字段:

UserProfile.objects.get(user__username=user_id)