【问题标题】:Cannot resolve keyword 'i' into field. Choices are: id, joined_on, user, user_id无法将关键字“i”解析为字段。选项有:id、joined_on、user、user_id
【发布时间】:2017-05-25 17:06:30
【问题描述】:

我不明白我做错了什么。我正在尝试通过表单更新模型,并且我一直在在线关注教程,它们都指向获取“id”的方向。我已经完成了,但我不断收到此错误:

无法将关键字“i”解析为字段。选项有:id、joined_on、user、user_id

id 键在那里,但他认为是我正在寻找的“i”。

有什么想法吗?

view.py

def testRegistration(request):
                    id = UserProfileModel.objects.get('id')
                    user_status_form = UserDetailsForm(request.POST or None, instance=id)
                    if request.method == 'POST':
                            if user_status_form.is_valid():
                                    user_status = user_status_form.save(commit=False)
                                    user_status.user = get_user(request)
                                    user_status.save()
                                    user_status_form = UserDetailsForm()
                            else:
                                    user_status_form = UserDetailsForm()

                            return HttpResponseRedirect('testRegistration')

                    return render(
                            request, 'registrationTest.html',
                            {'user_status_form' : user_status_form,
                             }
                    )

model.py

class UserProfileModel(models.Model):
            user = models.OneToOneField(User, unique=True)
            joined_on = models.DateTimeField(auto_now=True, null=True) 

回溯环境:

        Request Method: GET
        Request URL: http://127.0.0.1:8000/testRegistration

        Django Version: 1.10.5
        Python Version: 3.5.2
        Installed Applications:
        ['django.contrib.admin',
         'django.contrib.auth',
         'django.contrib.contenttypes',
         'django.contrib.sessions',
         'django.contrib.messages',
         'django.contrib.staticfiles',
         'app']
        Installed Middleware:
        ['django.middleware.security.SecurityMiddleware',
         'django.contrib.sessions.middleware.SessionMiddleware',
         'django.middleware.common.CommonMiddleware',
         'django.middleware.csrf.CsrfViewMiddleware',
         'django.contrib.auth.middleware.AuthenticationMiddleware',
         'django.contrib.messages.middleware.MessageMiddleware',
         'django.middleware.clickjacking.XFrameOptionsMiddleware']

追溯:

        File "/Applications/anaconda/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
          39.             response = get_response(request)

        File "/Applications/anaconda/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
          187.                 response = self.process_exception_by_middleware(e, request)

        File "/Applications/anaconda/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
          185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

        File "/Users/xxx/xxx/xxx/app/views.py" in testRegistration
          88.         id = UserProfileModel.objects.get('id')

        File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/manager.py" in manager_method
          85.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

        File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/query.py" in get
          376.         clone = self.filter(*args, **kwargs)

        File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/query.py" in filter
          796.         return self._filter_or_exclude(False, *args, **kwargs)

        File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/query.py" in _filter_or_exclude
          814.             clone.query.add_q(Q(*args, **kwargs))

        File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/sql/query.py" in add_q
          1227.         clause, _ = self._add_q(q_object, self.used_aliases)

        File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/sql/query.py" in _add_q
          1253.                     allow_joins=allow_joins, split_subq=split_subq,

        File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/sql/query.py" in build_filter
          1133.         lookups, parts, reffed_expression = self.solve_lookup_type(arg)

        File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/sql/query.py" in solve_lookup_type
          1019.         _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())

        File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/sql/query.py" in names_to_path
          1327.                                      "Choices are: %s" % (name, ", ".join(available)))

        Exception Type: FieldError at /testRegistration
        Exception Value: Cannot resolve keyword 'i' into field. Choices are: id, joined_on, user, user_id

【问题讨论】:

    标签: python django


    【解决方案1】:

    错误在你的这一行视图中,

    id = UserProfileModel.objects.get('id')
    

    换成这样的,

    id = UserProfileModel.objects.get(user__username=request.user.username)
    

    objects.get 方法将 field_names 和 values 作为关键字参数,并返回一个匹配条件的对象。 从您的角度来看,我想您想获取当前登录用户的 UserProfile 的 ID。为此,您需要访问用户字段的 id(ForeignKey to User)并将其与当前用户(request.user)匹配。

    【讨论】:

    • 据我了解,我需要检索与该特定用户关联的数据,以便通过表单将这些数据更新到数据库中。我已经尝试过您的解决方案,我得到“UserProfileModel 匹配查询不存在。”在数据库中它确实存在。
    • 您确定该用户的 UserProfile 模型确实存在于数据库中吗?
    • 我的错,试试这个,user__username=request.user.username,我忘了放双下划线 "__" 那里
    • 我已经更新了答案..你应该试试..这应该工作
    • 我已经签入 /admin 并且有一个用户名:user。
    猜你喜欢
    • 2021-11-04
    • 2019-09-08
    • 1970-01-01
    • 2020-10-06
    • 2019-10-16
    • 2012-09-13
    • 2013-04-09
    • 2021-10-17
    • 1970-01-01
    相关资源
    最近更新 更多