用户输入数据并收到以下错误:“'function'对象没有属性'id。'”但是,当他们刷新页面时,表单修改has的页面已成功更新。这是错误所在的views.py部分。有问题的行是return redirect('learning_logs:topic', topic_id=topic.id)
def edit_entry(request, entry_id):
"""Edit an existing entry."""
entry = Entry.objects.get(id=entry_id)
if request.method != 'POST':
# Initial request; pre-fill form with the current entry.
form = EntryForm(instance=entry)
else:
#POST data submitted; process data.
form = EntryForm(instance=entry, data=request.POST)
if form.is_valid():
form.save()
return redirect('learning_logs:topic', topic_id=topic.id)
context = {'entry': entry, 'topic': topic, 'form': form}
return render(request, 'learning_logs/edit_entry.html', context)
这里是错误:
Django version 2.2.12, using settings 'learning_log.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Internal Server Error: /edit_entry/6/
Traceback (most recent call last):
File "C:\Users\14254\Desktop\Programming\Projects\(Mathes) Learning Log\learning_log\ll_env\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\14254\Desktop\Programming\Projects\(Mathes) Learning Log\learning_log\ll_env\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\14254\Desktop\Programming\Projects\(Mathes) Learning Log\learning_log\ll_env\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\14254\Desktop\Programming\Projects\(Mathes) Learning Log\learning_log\learning_logs\views.py", line 74, in edit_entry
return redirect('learning_logs:topic', topic_id=topic.id)
AttributeError: 'function' object has no attribute 'id'
[16/May/2020 18:29:37] "POST /edit_entry/6/ HTTP/1.1" 500 68121
topic
可能是views.py
中的另一个视图功能。因此,这意味着topic.id
将尝试获取该视图的.id
属性,但是函数通常不具有.id
属性。
您可以做的是反对form.save()
的结果并将其存储在名为topic
的local变量中:
def edit_entry(request, entry_id):
"""Edit an existing entry."""
entry = Entry.objects.get(id=entry_id)
if request.method != 'POST':
# Initial request; pre-fill form with the current entry.
form = EntryForm(instance=entry)
else:
#POST data submitted; process data.
form = EntryForm(instance=entry, data=request.POST)
if form.is_valid():
topic = form.save()
return redirect('learning_logs:topic', topic_id=topic.id)
context = {'entry': entry, 'topic': topic, 'form': form}
return render(request, 'learning_logs/edit_entry.html', context)