#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 /…