我最近使用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)
我希望有人可以帮助解决这个难题。 预先非常感谢。