仅在刷新时才编辑表格-Django

问题描述 投票:0回答:1

用户输入数据并收到以下错误:“'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
python django
1个回答
0
投票

topic可能是views.py中的另一个视图功能。因此,这意味着topic.id将尝试获取该视图的.id属性,但是函数通常不具有.id属性。

您可以做的是反对form.save()的结果并将其存储在名为topiclocal变量中:

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)
© www.soinside.com 2019 - 2024. All rights reserved.