Reputation: 790
I am a django beginner and trying to build a to-do list app. I am creating a ModelForm which adds a new task in the app. However upon trying to save the data, nothing is happening. No data is being saved, no errors being displayed.
models.py:
class Task(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=50)
description = models.TextField(blank=True, null=True)
start_date = models.DateTimeField()
end_date = models.DateTimeField()
priority = models.BooleanField(default=True)
completed = models.BooleanField(default=False)
def __str__(self):
return self.title
ModelForm:
class TaskForm(forms.ModelForm):
class Meta:
model = Task
fields = ('title', 'description', 'start_date', 'end_date', 'priority')
views.py:
def task(request):
task = Task.objects.filter(user=request.user, completed=False)
queryset = task.order_by('-start_date')
form = TaskForm(request.POST or None)
if request.method == 'POST':
if form.is_valid():
form.instance.user = request.user
form.save()
redirect('task:task-list')
else:
print('error')
context = {
'task': queryset,
'form': form,
}
return render(request, 'task-list.html', context)
template:
<form action="." method="POST">
{% csrf_token %}
{{ form }}
<button type="submit">Add task</button>
</form>
any help would be appreciated!
Upvotes: 0
Views: 25
Reputation: 2393
Have you tried being more explicit?
def task(request):
task = Task.objects.filter(user=request.user, completed=False)
queryset = task.order_by('-start_date')
if request.method == 'POST':
form = TaskForm(request.POST)
if form.is_valid():
form.instance.user = request.user
form.save()
return redirect('task:task-list')
else:
form = TaskForm()
context = {
'task': queryset,
'form': form,
}
return render(request, 'task-list.html', context)
<form action="{% url 'task-list' %}" method="POST">
{% csrf_token %}
{{ form }}
<button type="submit">Add task</button>
</form>
Upvotes: 1