iscream
iscream

Reputation: 790

ModelForm not saving any data

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

Answers (1)

Nothing here
Nothing here

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

Related Questions