Джанго не сохраняет форму в базе данных - PullRequest
0 голосов
/ 22 марта 2019

У меня проблема с формой, которая не сохраняется в базе данных.

views.py

...
@login_required
def create_task(request):
    if request.method == 'POST':
        form = CreateTaskForm(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
            return redirect('index')
    else:
        form = CreateTaskForm()
        context = {'form': form}
        return render(request, 'tasks/task_form.html', context)
...

forms.py

from django import forms
from .models import Task


class CreateTaskForm(forms.ModelForm):

    class Meta:
        model = Task
        fields = (
            'name',
            'end_date',
            'description',
        )


Это проблема с представлением create_task или CreateTaskForm?

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Проблема с представлением create_task:

  if request.method == 'POST':
            form = CreateTaskForm(request.POST)
            if form.is_valid():
                # if you have user in your model task make commit to false then set the user
                form.save(commit=false)
                form.user = request.user
                #if not save directly you form
                form.save()
                return redirect('index')

, затем проверьте, является ли ваш URL-адрес:

path('create_task', create_task, name="create_task")
0 голосов
/ 23 марта 2019

Прежде всего, так как вы используете POST, что означает, что вы создаете, нет необходимости в instance=request.user - который используется для сравнения предыдущих данных с новыми данными, предоставленными формой.Глядя на вашу форму, вы не видите, что она имеет какое-либо отношение к пользователю.

Во-вторых, вы не отображаете или не возвращаете ошибки формы.Так что это может быть молчаливая ошибка проверки на уровне модели без вашего ведома.Попробуйте добавить возврат с ошибками формы.

@login_required
def create_task(request):
    form = CreateTaskForm()
    if request.method == 'POST':
        form = CreateTaskForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('index')
     context = {'form': form}
     return render(request, 'tasks/task_form.html', context)

Вы можете посмотреть в form.errors на стороне шаблона, чтобы увидеть ошибки проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...