Не сохраняет данные формы в базе данных django sqlite
Я пытаюсь создать приложение django для моего класса веб-разработки для задания, но моя информация из формы не сохраняется в базе данных. Большая часть этого кода основана на его лекциях, поэтому я не хочу добавлять какие-либо библиотеки или сильно изменять этот код. Запрос на почту проходит через терминал, но данные не сохраняются. Вот мой код на данный момент:
views.py
from django.shortcuts import render, redirect
from django.http import HttpResponse, HttpRequest
from . models import Activity
# Create your views here.
def index(request: HttpRequest):
return render(request, "activity/index.html")
def new_activity(request: HttpRequest):
return render(request, "activity/new_activity.html")
def create_new_activity(request: HttpRequest):
params = request.POST
activity = Activity(
activity_name = params.get("activity_name")
)
activity.save()
return redirect("/")
страница, на которой отправляется моя форма new_activity.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>New Activity</h1>
<form action="/new_activity/" method="post">
<input type="text" name="activity_name" id="activity_name">
<button type="submit">Add Activity</button>
</form>
</body>
</html>
urls.pf
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
path("new_activity/", views.new_activity, name="new_activity"),
]
и вот модель, которую я пытался перенести
from django.db import models
# Create your models here.
class Activity(models.Model):
id = models.BigAutoField(primary_key=True)
activity_name = models.TextField()
class TimeLog(models.Model):
id = models.BigAutoField(primary_key=True)
start_time = models.TimeField()
end_time = models.TimeField()
activity = models.ForeignKey("Activity", on_delete=models.CASCADE)
Если кто-то может заметить проблему, я буду признателен за лучший ответ. Спасибо!
Я не уверен, что использую неправильные имена в любом месте, я перепробовал кучу комбинаций
Вы отправляете форму в представление new_activity
, поэтому оно ничего не делает с данными, а просто перерисовывает шаблон.
Добавьте логику для обработки POST-запроса к представлению new_activity
:
def new_activity(request: HttpRequest):
if request.method == 'POST':
params = request.POST
activity = Activity.objects.create(
activity_name=params.get('activity_name')
)
return redirect('index')
return render(request, 'activity/new_activity.html')
Note: It is better to use a
Form
[Django-doc] than to perform manual validation and cleaning of the data. AForm
will not only simplify rendering a form in HTML, but it also makes it more convenient to validate the input, and clean the data to a more convenient type.
Note: It is usually better to use
.create(…)
[Django-doc] to create a record in the database, than to instantiate a model object and.save(…)
[Django-doc] it: when you save a model instance, it first looks if there is already a record, so this can increase the number of queries on the database.
Примечание: Обычно лучше использовать имя представления, на которое вы перенаправляете, так Django сможет определить путь, что уменьшит вероятность того, что путь содержит ошибки, и будет автоматически адаптироваться, если вы измените/переместите путь.