AttributeError: объект 'QuerySet' не имеет атрибута 'save'
Вот страница, которую я пытаюсь разработать. При нажатии на кнопку обновления, заполненные данные должны обновляться в базе данных MySql под названием TL.
Но при нажатии на кнопку update выдает следующую ошибку: AttributeError at /add/ Объект 'QuerySet' не имеет атрибута 'save'
Ниже приведен файл Views.py в Django, в котором я разместил код для добавления:
def add(request):
ad = TL.objects.all()
if request.method == 'POST':
TL_Name = request.POST.get('TL_Name')
Proj_name = request.POST.get('Proj_name')
Deadline = request.POST.get('Deadline')
ad.TL_Name = TL_Name
ad.Proj_name = Proj_name
ad.Deadline = Deadline
ad.save()
return redirect("/operations")
return render(request, 'operations.html', {"name": ad, 'b': ad})
Ниже представлен файл urls.py:
from . import views
urlpatterns = [
path('', views.home),
path('adminlogin/', views.adminlogin),
path('operations/', views.operations),
path('approve/<int:pk>', views.approval),
path('decline/<int:pk>/', views.delete),
path('edit/<int:pk>/', views.edit),
path('add/', views.add),
path('tlist/', views.approved_tlist)
]
Ниже представлен файл operations.html:
Пожалуйста, помогите мне разобраться с этой ошибкой. Заранее благодарю...
ad = TL.objects.all()
это присвоение кверисета всех TL к ad
ad.TL_Name = TL_Name
ad.Proj_name = Proj_name
ad.Deadline = Deadline
ad.save()
поэтому не может быть сделано, так как это не один элемент.
Если вы хотите обновить все объекты TL, вы можете использовать update
ad = TL.objects.update(TL_Name=TL_Name, Proj_name=Proj_name, Deadline=Deadline)
или используйте TL.objects.first() или TL.objects.get(id=id_you_want)
для получения отдельного экземпляра модели, а затем используйте
ad.TL_Name = TL_Name
ad.Proj_name = Proj_name
ad.Deadline = Deadline
ad.save()
Сначала вы устанавливаете ad = TL.objects.all()
Это возвращает все ваши объекты Model. Затем далее в своем коде вы пытаетесь сохранить ad
в базу данных. Это не сработает, и Django говорит вам об этом. Вы пытаетесь сохранить набор запросов.
У вас возникла эта ошибка, потому что вы применяете метод .save()
на кверисете, что неправильно. Вместо этого вам нужно вызвать .save()
на экземпляре объекта вот так:
def add(request):
# ad = TL.objects.all() Not usefull here
context = {}
if request.method == 'POST':
TL_Name = request.POST.get('TL_Name')
Proj_name = request.POST.get('Proj_name')
Deadline = request.POST.get('Deadline')
# Create a new TL instance here (Note that with class.objects.create() we don't need to call save())
new_tl = TL.objects.create(TL_Name=TL_Name, Proj_name=Proj_name, Deadline=Deadline)
# Update the context data
context = ['b'] = new_tl
return redirect("/operations")
# Retrieve all TL objects and add to context
context['name'] = TL.objects.all()
return render(request, 'operations.html', context)