Форма Django не добавляется в базу данных SQLite3

#python #django

#python #django

Вопрос:

У меня есть следующая форма Django, предназначенная для создания нового элемента в моей базе данных. Он возвращает «ложноположительный результат» в том смысле, что он показывает зеленое «Готово» после того, как я нажал «Отправить», но запись фактически не добавлена в базу данных. Есть идеи, что является причиной этого?

HTML

                     <form method="POST">
                        {% csrf_token %}
                        {{form}}
                        <div style="color:green">{{info}}</div>
                        <div style="color:red">{{error}}</div>
                        <div class="modal-footer">
                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                            <button type="submit" class="btn btn-primary">Submit</button>
                        </div>
                    </form>
 

views.py

 def creator(request):
    if request.method == "POST":
        form = CommunicationsForm(request.POST)
        if form.is_valid():
            form.save()
        return render(request,'polls/creation.html',{"form":CommunicationsForm,"info":"Done"})
    else:
        return render(request,'polls/creation.html',{"form":CommunicationsForm})
 

forms.py

 class CommunicationsForm(forms.ModelForm):
    class Meta:
        model = Communications
        fields = "__all__"

        widgets = {
            'project':forms.TextInput(attrs={'class': 'form-control','placeholder':'Enter your Project Name'}),
            'title':forms.TextInput(attrs={'class': 'form-control','placeholder':'Enter a short Title'}),
            'intent':forms.Textarea(attrs={'class': 'form-control','placeholder':'Describe the intent and desired outcome of the communication'}),
            'date':forms.TextInput(attrs={'class': 'form-control','placeholder':'Select a Date'}),
            'channel':forms.Select(attrs={'class': 'form-control','placeholder':'Select a Channel'}),
            'content_type':forms.Select(attrs={'class': 'form-control','placeholder':'Select a Content Type'}),
            'audience':forms.TextInput(attrs={'class': 'form-control','placeholder':'Enter the Audience(s)'}),
            'status':forms.Select(attrs={'class': 'form-control','placeholder':'Select the Status'}),
            }
 

models.py

 class Communications(models.Model):
    project = models.CharField(max_length=200)
    title = models.CharField(max_length=200)
    intent = models.CharField(max_length=200)
    date = models.CharField(max_length=200)
    channel = models.CharField(max_length=200)
    content_type = models.CharField(max_length=200)
    audience = models.CharField(max_length=200)
    status = models.CharField(max_length=200)
    def __str__(self):
        return self.communication
 

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

1. Даже в случае form.is_valid() сбоя вы вызываете render(...) with {'info': 'Done'}

2. Я намеревался написать это как «если форма действительна, сохраните форму, затем выведите «Готово» для пользователя» — я предполагаю, что это не то, что говорит эта логика?

3. нет, тогда вам нужно сделать отступ render под if form.is_valid() деталью. Но, тем не менее, это все равно не очень хорошая идея: успешное сообщение обычно означает, что вы отвечаете перенаправлением: django-antipatterns.com/antipatterns /…