ValueError:无法查询“用户名”:必须是“用户”实例

时间:2020-07-16 12:50:10

标签: python django

我最近使用nginx / gunicorn而不是Apache2将项目迁移到了新主机。 该项目具有包含User和Profile类(以及其他类)的自定义用户模型。

同一项目在旧版本中运行时没有错误。但是在新环境中 当注册用户更新其个人资料时,我们收到ValueError。
代码完全相同。但是我们升级了一些软件包,例如Django 3.0.7到3.0.8,可能还有其他一些似乎无害的

这是错误输出

Internal Server Error: /update_profile/
Traceback (most recent call last):
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/webapps/orchidroots/myproject/accounts/views.py", line 183, in update_profile
    myprofile = Profile.objects.get(user=user)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/query.py", line 404, in get
    clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/query.py", line 904, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/query.py", line 923, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1354, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1381, in _add_q
    child_clause, needed_inner = self.build_filter(
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1288, in build_filter
    self.check_related_objects(join_info.final_field, value, join_info.opts)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1123, in check_related_objects
    self.check_query_object_type(value, opts, field)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1104, in check_query_object_type
    raise ValueError(
ValueError: Cannot query "xxx": Must be "User" instance.
ERROR:django.request:Internal Server Error: /update_profile/
Traceback (most recent call last):
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/webapps/orchidroots/myproject/accounts/views.py", line 183, in update_profile
    myprofile = Profile.objects.get(user=user)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/query.py", line 404, in get
    clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/query.py", line 904, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/query.py", line 923, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1354, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1381, in _add_q
    child_clause, needed_inner = self.build_filter(
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1288, in build_filter
    self.check_related_objects(join_info.final_field, value, join_info.opts)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1123, in check_related_objects
    self.check_query_object_type(value, opts, field)
  File "/webapps/orchidroots/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1104, in check_query_object_type
    raise ValueError(
ValueError: Cannot query "xxx": Must be "User" instance.

引发错误的视图方法:

def update_profile(request):
    user = auth.get_user(request)    <------- We also tried user = request.user
    if not request.user.is_authenticated:
        return HttpResponseRedirect('/login/')
    myprofile = Profile.objects.get(user=user) <------ error here
    if request.method == 'POST':
        form = ProfileForm(request.POST)
        if form.is_valid():
            profile_obj = form.save(commit=False)

这里是模型(简体):

class User(AbstractBaseUser):
    username  = models.CharField(max_length=255, unique=True)
    fullname =  models.CharField(max_length=255, null=True)
    email = models.EmailField(verbose_name='email address', max_length=255) #,  unique=True,)
    tier = models.ForeignKey(Tier, null=True, default=1, db_column='tier',on_delete=models.DO_NOTHING)
  

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    confirm_email = models.CharField(max_length=100, blank=True)
    photo_credit_name = models.CharField(max_length=100, blank=True)
    current_credit_name = models.OneToOneField(Photographer, blank=True, null=True, on_delete=models.DO_NOTHING)
    specialty = models.CharField(max_length=500, null=True,blank=True)
    portfolio_site = models.URLField(max_length=500, blank=True)
    profile_pic = models.ImageField(upload_to='profile_pics',null=True,blank=True)
    country = models.ForeignKey(Country,db_column='country',on_delete=models.DO_NOTHING,null=True, blank=True)
    approved = models.BooleanField( blank=True, default=True)
    created_date = models.DateTimeField(auto_now_add=True)
    modified_date = models.DateTimeField(auto_now=True)

我希望有人可以帮助解决这个难题。 预先非常感谢。

0 个答案:

没有答案
相关问题