我正在寻找为我的公司设置票务服务,我在Django表格和Formspree.io之间遇到了一些问题。
用户使用我的Django表单创建票证。然后,他们的门票存储在我的数据库中,我的应用程序通过Formspree
向support@mycompany.fr发送电子邮件。
当我点击submit button
时,邮件会很好地发送到我的电子邮件地址,但数据不会保存在我的数据库中。到目前为止,我还没有办法完成这个过程......
我的模特看起来像:
class Ticket(models.Model):
Etat = models.CharField(max_length = 30, choices = CHOIX_ETAT_TICKET, verbose_name="Etat du ticket")
Nom = models.CharField(max_length=40, verbose_name="Nom du createur")
Prenom = models.CharField(max_length=40, verbose_name="Prenom du createur")
Telephone = models.CharField(max_length=20, verbose_name='Téléphone')
Mail = models.CharField(max_length=40, verbose_name='Email')
Objet = models.CharField(max_length=60, verbose_name='Objet du ticket')
Description = models.CharField(max_length=250, verbose_name='Description du ticket')
Creation = models.DateTimeField(auto_now_add=True)
Utilisateur = models.CharField(max_length=100, verbose_name="Utilisateur")
我的表单如下:
class TicketFormulaire(forms.ModelForm):
Utilisateur = forms.CharField(widget=forms.HiddenInput())
Etat = forms.CharField(widget=forms.HiddenInput())
class Meta :
model = Ticket
fields = ["Etat", "Nom", "Prenom", "Telephone", "Mail", "Objet", "Description", "Utilisateur"]
我的观点如下:
@login_required
def Identity_Ticket(request) :
if request.method == 'POST':
form = TicketFormulaire(request.POST or None)
if form.is_valid() : # Vérification sur la validité des données
post = form.save()
messages.success(request, 'Le formulaire a été enregistré !')
#return HttpResponseRedirect(reverse('Home'))
else:
messages.error(request, "Le formulaire est invalide !")
else:
form = TicketFormulaire()
form.fields['Utilisateur'].initial = request.user.last_name + " " + request.user.first_name
form.fields['Etat'].initial = 'En attente'
return render(request, 'Identity_Societe_Ticket.html', {"form" : form, })
最后是我的html模板:
<h4 class="subtitle"><b> <span class="glyphicon glyphicon-user"></span></span> Création d'un nouveau ticket</b></h4>
<form autocomplete="off" class = "form" method='POST' action='https://formspree.io/support@mycompany.fr'> {% csrf_token %} <br></br>
{{ form.as_p}}
<br></br>
<input type="submit" value="Enregistrer le ticket" onclick="return confirm('Valider le formulaire ?')" />
</form>
您是否有第一次在我的数据库中保存数据的解决方案,然后发送电子邮件?
任何帮助都可以欣赏;)
______________ 更新: ______________
我的HTML文件如下:
<h4 class="subtitle"><b> <span class="glyphicon glyphicon-user"></span></span> New ticket</b></h4>
<form autocomplete="off" class = "form" method='POST' action='' enctype="multipart/form-data"> {% csrf_token %} <br></br>
{{ form.as_p}}
<br></br>
<input type="submit" onclick="return confirm('Confirm the ticket ?')" />
</form>
<script>
var $TicketForm = $('#someid');
$TicketForm.submit(function(e) {
e.preventDefault();
$.ajax({
url: '//formspree.io/support@mycompany.fr',
method: 'POST',
data: $(this).serialize(),
dataType: 'json',
beforeSend: function() {
$TicketForm.append('<div class="alert alert--loading">Envoi du ticket en cours</div>');
},
success: function(data) {
$TicketForm.find('.alert--loading').hide();
$TicketForm.append('<div class="alert alert--success">Le ticket a été envoyé ! </div>');
},
error: function(err) {
$TicketForm.find('.alert--loading').hide();
$TicketForm.append('<div class="alert alert--error">Il semble y avoir une erreur</div>');
}
});
});
</script>
如果我未在id="someid"
中添加<form>
,则数据会保存在我的数据库中,并且不会发送电子邮件,但如果我写id="someid"
,则会发送电子邮件但不会发送数据保存在我的数据库中...问题出在那里......
答案 0 :(得分:2)
你已经给了action='https://formspree.io/support@mycompany.fr'
表单中的参数,以便您的表单提交到formspree.io站点。而不是使用您的应用程序功能URL提交表单,并在保存表单后在django视图中执行formspree.io处理。
修改强> 我不知道formspee.io,但我理解你的查询, 一种方法是使用ajax,
更改为
<button type="button" id="someid">
而不是
<input type="submit" />
$("#someid").on("click", function() {
$.ajax({
url: "//formspree.io/youremail@gmail.com",
method: "POST",
data: {message: "hello!","extradatagoeshere":""},
dataType: "json",
success:function(data)
{
// now submit your actual form to db by form.submit();
}
});
});
或者使用python请求库在表单保存的查看功能逻辑后发布数据,
import requests
url = 'https://formspree.io/support@mycompany.fr'
data = {"yourdata":"data"} # pass a whole bunch of dict which needed to be send in data
requests.post(url, data=data)
答案 1 :(得分:1)
您的操作是将数据发布到formspree
网站,而不是发布到您网站的视图,因此您永远无法获取数据并将其保存到数据库中。
如果你真的想这样做,一种方法是使用ajax
点击提交按钮将数据发布到django view
,你可以在{id
中添加button
1}}并检查onclick
将调用ajax
。
表格将保持不变。
希望这可以帮助你