Django - form.save () не создает ModelForm - PullRequest
1 голос
/ 11 апреля 2020

В моем Django приложении пользователи отправляют отзыв о задаче. Я создаю form с ModelForm, а после form.save() мой объект не создается и не загружается в базу данных. Вот мои коды:

views.py:

@login_required(login_url='sign_in')
def task_details(request, slug):
    if slug:
        task = get_object_or_404(Task, slug=slug)
        today = datetime.now().date()
        deadline = task.task_deadline.date()
        time_left = deadline - today
        form = CreateFeedbackForm()

    if request.method == 'POST':
        form = CreateFeedbackForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('index')
    else:
        form = CreateFeedbackForm()
    messages.info(request, 'Feedback sent.')

    context = {
        'task': task,
        'form': form,
        'days_left': time_left.days
    }
    return render(request, 'task-details.html', context)

models.py:

class TaskFeedback(models.Model):
    task = models.ForeignKey(Task, on_delete=models.CASCADE, null=True, blank=True)
    sender = CurrentUserField()
    is_solved = models.BooleanField(default=False)
    feedback_content = models.TextField(max_length=1000, null=True, blank=True)
    date_added = models.DateTimeField(auto_now_add = True)

    def __str__(self):
        return self.feedback_content

forms.py:

class CreateFeedbackForm(forms.ModelForm):
    class Meta:
        model = TaskFeedback
        fields = ['feedback_content', 'is_solved']

    def __init__(self, *args, **kwargs):
        super(CreateFeedbackForm, self).__init__(*args, **kwargs)

1 Ответ

0 голосов
/ 11 апреля 2020

Проблема была в действии формы на моей html странице:

<form action="{% url 'task_details' task.slug %}" method="POST">
            {% csrf_token %}
            {{ form.feedback_content }}
            <div class="panel-buttons">
                <div class="checkbox">
                    {{ form.is_solved }}
                </div>
                <div class="save-btn-container">
                    <button class="btn btn--pill btn--green" type="submit">Send</button>
                </div>
            </div>
        </form>
...