Django не сохраняет форму в datebase

#python #django

#python #django

Вопрос:

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

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?

Комментарии:

1. Почему вы передаете пользовательский экземпляр form в модель задачи? В чем ошибка?

2. Помимо неправильного экземпляра, который вы передаете, вы видите какие-либо ошибки? Если нет, вы уверены, что ваш if request.method == POST код вызван? Можете ли вы установить точку останова внутри if и проверить, что вы достигли этой точки?

3. Вам также следует добавить Task модель

Ответ №1:

Проблема заключается в представлении 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")
  

Комментарии:

1. form.user не является частью формы, и они не совместно использовали модель… откуда вы знаете, что user это часть модели?

2. проблема в его экземпляре =request.user, вам не нужно его добавлять. Я добавил form.user, чтобы указать пользователя, существует ли он в вашей модели в качестве внешнего ключа

3. Верно, что ‘instance=request.user’ недопустим, но добавление ‘form.user’ без ведома одинаково проблематично

4. Да, но если модель задачи не содержит ‘user foreignkey’, не используйте ‘form.user’, сохраните вашу форму напрямую ‘form.save()’.

5. Можете ли вы добавить свой model.py ?

Ответ №2:

Во-первых, поскольку вы используете 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 на сторону шаблона, чтобы увидеть ошибки проверки.